diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/CertificateExample.c | 673 | ||||
-rw-r--r-- | examples/CrlExample.c | 540 | ||||
-rw-r--r-- | examples/Makefile.am | 36 | ||||
-rw-r--r-- | examples/asn1Coding_test.asg | 6 | ||||
-rw-r--r-- | examples/asn1Coding_test.asn | 29 | ||||
-rw-r--r-- | examples/pkix.asn | 954 |
6 files changed, 0 insertions, 2238 deletions
diff --git a/examples/CertificateExample.c b/examples/CertificateExample.c deleted file mode 100644 index a62ea79..0000000 --- a/examples/CertificateExample.c +++ /dev/null @@ -1,673 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -/*****************************************************/ -/* File: CertificateExample.c */ -/* Description: An example on how to use the ASN1 */ -/* parser with the Certificate.txt file */ -/*****************************************************/ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include "libtasn1.h" - - -static char * -my_ltostr (long v, char *str) -{ - long d, r; - char temp[20]; - int count, k, start; - - if (v < 0) - { - str[0] = '-'; - start = 1; - v = -v; - } - else - start = 0; - - count = 0; - do - { - d = v / 10; - r = v - d * 10; - temp[start + count] = '0' + (char) r; - count++; - v = d; - } - while (v); - - for (k = 0; k < count; k++) - str[k + start] = temp[start + count - k - 1]; - str[count + start] = 0; - return str; -} - -/******************************************************/ -/* Function : get_name_type */ -/* Description: analyze a structure of type Name */ -/* Parameters: */ -/* char *root: the structure identifier */ -/* char *answer: the string with elements like: */ -/* "C=US O=gov" */ -/******************************************************/ -static void -get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root, - unsigned char *ans) -{ - int k, k2, result, len; - char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128]; - ASN1_TYPE value = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - char *answer = (char *) ans; - answer[0] = 0; - k = 1; - do - { - strcpy (name, root); - strcat (name, ".rdnSequence.?"); - my_ltostr (k, counter); - strcat (name, counter); - len = sizeof (str) - 1; - result = asn1_read_value (cert, name, str, &len); - if (result == ASN1_ELEMENT_NOT_FOUND) - break; - k2 = 1; - do - { - strcpy (name2, name); - strcat (name2, ".?"); - my_ltostr (k2, counter); - strcat (name2, counter); - len = sizeof (str) - 1; - result = asn1_read_value (cert, name2, str, &len); - if (result == ASN1_ELEMENT_NOT_FOUND) - break; - strcpy (name3, name2); - strcat (name3, ".type"); - len = sizeof (str) - 1; - result = asn1_read_value (cert, name3, str, &len); - strcpy (name3, name2); - strcat (name3, ".value"); - if (result == ASN1_SUCCESS) - { - len = sizeof (str2) - 1; - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-countryName", str2, - &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationName", - &value); - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - asn1_der_decoding (&value, str, len, errorDescription); - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - strcpy (name3, str); - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " C="); - strcat (answer, str); - asn1_delete_structure (&value); - } - else - { - len = sizeof (str2) - 1; - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-organizationName", - str2, &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationName", - &value); - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - asn1_der_decoding (&value, str, len, errorDescription); - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - strcpy (name3, str); - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " O="); - strcat (answer, str); - asn1_delete_structure (&value); - } - else - { - len = sizeof (str2) - 1; - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-organizationalUnitName", - str2, &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationalUnitName", - &value); - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - asn1_der_decoding (&value, str, len, - errorDescription); - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - strcpy (name3, str); - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " OU="); - strcat (answer, str); - asn1_delete_structure (&value); - } - } - } - } - k2++; - } - while (1); - k++; - } - while (1); -} - - -/******************************************************/ -/* Function : create_certificate */ -/* Description: creates a certificate named */ -/* "certificate1". Values are the same */ -/* as in rfc2459 Appendix D.1 */ -/* Parameters: */ -/* unsigned char *der: contains the der encoding */ -/* int *der_len: number of bytes of der string */ -/******************************************************/ -static void -create_certificate (ASN1_TYPE cert_def, unsigned char *der, int *der_len) -{ - int result, k, len; - unsigned char str[1024]; - const unsigned char *str2; - ASN1_TYPE cert1 = ASN1_TYPE_EMPTY; - ASN1_TYPE value = ASN1_TYPE_EMPTY; - ASN1_TYPE param = ASN1_TYPE_EMPTY; - ASN1_TYPE constr = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - int max_len; - - max_len = *der_len; - - result = - asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert1); - - /* Use the next 3 lines to visit the empty certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(cert1,""); - printf("-----------------\n"); */ - - /* version: v3(2) */ - result = asn1_write_value (cert1, "tbsCertificate.version", "v3", 0); - - /* serialNumber: 17 */ - result = asn1_write_value (cert1, "tbsCertificate.serialNumber", "17", 0); - - /* signature: dsa-with-sha1 */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); - result = - asn1_write_value (cert1, "tbsCertificate.signature.algorithm", str, 1); - - result = asn1_write_value (cert1, "tbsCertificate.signature.parameters", - NULL, 0); - - - /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */ - result = - asn1_write_value (cert1, "tbsCertificate.issuer", "rdnSequence", 12); - - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", - 1); - /* C */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, - &len); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); - result = asn1_write_value (value, "", "US", 2); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", - 1); - /* O */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, - &len); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "gov", 3); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence", "NEW", 1); - result = - asn1_write_value (cert1, "tbsCertificate.issuer.rdnSequence.?LAST", "NEW", - 1); - - /* OU */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", - str, &len); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationalUnitName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "nist", 4); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - /* validity */ - result = - asn1_write_value (cert1, "tbsCertificate.validity.notBefore", "utcTime", - 1); - result = - asn1_write_value (cert1, "tbsCertificate.validity.notBefore.utcTime", - "970630000000Z", 1); - - result = - asn1_write_value (cert1, "tbsCertificate.validity.notAfter", "utcTime", - 1); - result = - asn1_write_value (cert1, "tbsCertificate.validity.notAfter.utcTime", - "971231000000Z", 1); - - - - /* subject: Country="US" Organization="gov" OrganizationUnit="nist" */ - result = - asn1_write_value (cert1, "tbsCertificate.subject", "rdnSequence", 1); - - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 1); - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", - "NEW", 1); - /* C */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, - &len); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); - result = asn1_write_value (value, "", "US", 2); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4); - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", - "NEW", 4); - /* O */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, - &len); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "gov", 3); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence", "NEW", 4); - result = - asn1_write_value (cert1, "tbsCertificate.subject.rdnSequence.?LAST", - "NEW", 4); - /* OU */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", - str, &len); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationalUnitName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "nist", 4); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (cert1, - "tbsCertificate.subject.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - /* subjectPublicKeyInfo: dsa with parameters=Dss-Parms */ - len = sizeof (str) - 1; - result = asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa", str, &len); - result = - asn1_write_value (cert1, - "tbsCertificate.subjectPublicKeyInfo.algorithm.algorithm", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.Dss-Parms", ¶m); - str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ - result = asn1_write_value (param, "p", str2, 128); - str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ - result = asn1_write_value (param, "q", str2, 20); - str2 = (const unsigned char *) "\xd4\x38"; /* only an example */ - result = asn1_write_value (param, "g", str2, 128); - *der_len = max_len; - result = asn1_der_coding (param, "", der, der_len, errorDescription); - asn1_delete_structure (¶m); - result = - asn1_write_value (cert1, - "tbsCertificate.subjectPublicKeyInfo.algorithm.parameters", - der, *der_len); - - - /* subjectPublicKey */ - str2 = (const unsigned char *) "\x02\x81"; /* only an example */ - result = - asn1_write_value (cert1, - "tbsCertificate.subjectPublicKeyInfo.subjectPublicKey", - str2, 1048); - - result = asn1_write_value (cert1, "tbsCertificate.issuerUniqueID", NULL, 0); /* NO OPTION */ - result = asn1_write_value (cert1, "tbsCertificate.subjectUniqueID", NULL, 0); /* NO OPTION */ - - /* extensions */ - result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1); - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-basicConstraints", str, - &len); - result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /* basicConstraints */ - result = - asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical", - "TRUE", 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.BasicConstraints", - &constr); - result = asn1_write_value (constr, "cA", "TRUE", 1); - result = asn1_write_value (constr, "pathLenConstraint", NULL, 0); - *der_len = max_len; - result = asn1_der_coding (constr, "", der, der_len, errorDescription); - result = asn1_delete_structure (&constr); - result = - asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue", der, - *der_len); - - - result = asn1_write_value (cert1, "tbsCertificate.extensions", "NEW", 1); - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-subjectKeyIdentifier", - str, &len); - result = asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnID", str, 1); /* subjectKeyIdentifier */ - result = - asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.critical", - "FALSE", 1); - str2 = (const unsigned char *) "\x04\x14\xe7\x26\xc5"; /* only an example */ - result = - asn1_write_value (cert1, "tbsCertificate.extensions.?LAST.extnValue", - str2, 22); - - - /* signatureAlgorithm: dsa-with-sha */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); - result = asn1_write_value (cert1, "signatureAlgorithm.algorithm", str, 1); - result = asn1_write_value (cert1, "signatureAlgorithm.parameters", NULL, 0); /* NO OPTION */ - - - /* signature */ - *der_len = max_len; - result = - asn1_der_coding (cert1, "tbsCertificate", der, der_len, errorDescription); - if (result != ASN1_SUCCESS) - { - printf ("\n'tbsCertificate' encoding creation: ERROR\n"); - } - /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */ - result = asn1_write_value (cert1, "signature", str2, 368); /* dsa-with-sha */ - - - /* Use the next 3 lines to visit the certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(cert1,""); - printf("-----------------\n"); */ - - *der_len = max_len; - result = asn1_der_coding (cert1, "", der, der_len, errorDescription); - if (result != ASN1_SUCCESS) - { - printf ("\n'certificate' encoding creation: ERROR\n"); - return; - } - - /* Print the 'Certificate1' DER encoding */ - printf ("-----------------\nCertificate Encoding:\nNumber of bytes=%i\n", - *der_len); - for (k = 0; k < *der_len; k++) - printf ("%02x ", der[k]); - printf ("\n-----------------\n"); - - /* Clear the "certificate1" structure */ - asn1_delete_structure (&cert1); -} - - - -/******************************************************/ -/* Function : get_certificate */ -/* Description: creates a certificate named */ -/* "certificate2" from a der encoding */ -/* string */ -/* Parameters: */ -/* unsigned char *der: the encoding string */ -/* int der_len: number of bytes of der string */ -/******************************************************/ -static void -get_certificate (ASN1_TYPE cert_def, unsigned char *der, int der_len) -{ - int result, len, start, end; - unsigned char str[1024], str2[1024]; - ASN1_TYPE cert2 = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - - asn1_create_element (cert_def, "PKIX1Implicit88.Certificate", &cert2); - - result = asn1_der_decoding (&cert2, der, der_len, errorDescription); - - if (result != ASN1_SUCCESS) - { - printf ("Problems with DER encoding\n"); - return; - } - - - /* issuer */ - get_Name_type (cert_def, cert2, "tbsCertificate.issuer", str); - printf ("certificate:\nissuer :%s\n", str); - /* subject */ - get_Name_type (cert_def, cert2, "tbsCertificate.subject", str); - printf ("subject:%s\n", str); - - - /* Verify sign */ - len = sizeof (str) - 1; - result = asn1_read_value (cert2, "signatureAlgorithm.algorithm", str, &len); - - len = sizeof (str2) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2, - &len); - if (!strcmp ((char *) str, (char *) str2)) - { /* dsa-with-sha */ - - result = asn1_der_decoding_startEnd (cert2, der, der_len, - "tbsCertificate", &start, &end); - - /* add the lines to calculate the sha on der[start]..der[end] */ - - len = sizeof (str) - 1; - result = asn1_read_value (cert2, "signature", str, &len); - - /* compare the previous value to signature ( with issuer public key) */ - } - - /* Use the next 3 lines to visit the certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(cert2,""); - printf("-----------------\n"); */ - - - /* Clear the "certificate2" structure */ - asn1_delete_structure (&cert2); -} - -extern const ASN1_ARRAY_TYPE pkix_asn1_tab[]; - -/********************************************************/ -/* Function : main */ -/* Description: reads the certificate description. */ -/* Creates a certificate and calculate */ -/* the der encoding. After that creates */ -/* another certificate from der string */ -/********************************************************/ -int -main (int argc, char *argv[]) -{ - int result, der_len; - unsigned char der[1024]; - ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - - if (1) - result = - asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription); - else - result = - asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription); - - if (result != ASN1_SUCCESS) - { - asn1_perror (result); - printf ("%s", errorDescription); - exit (1); - } - - - /* Use the following 3 lines to visit the PKIX1Implicit structures */ - /* printf("-----------------\n"); - asn1_visit_tree(PKIX1Implicit88,"PKIX1Implicit88"); - printf("-----------------\n"); */ - - der_len = 1024; - create_certificate (PKIX1Implicit88, der, &der_len); - - get_certificate (PKIX1Implicit88, der, der_len); - - /* Clear the "PKIX1Implicit88" structures */ - asn1_delete_structure (&PKIX1Implicit88); - - return 0; -} diff --git a/examples/CrlExample.c b/examples/CrlExample.c deleted file mode 100644 index 1e59ac7..0000000 --- a/examples/CrlExample.c +++ /dev/null @@ -1,540 +0,0 @@ -/* - * Copyright (C) 2000-2014 Free Software Foundation, Inc. - * - * This file is part of LIBTASN1. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - * - */ - -/*****************************************************/ -/* File: CrlExample.c */ -/* Description: An example on how to use the ASN1 */ -/* parser with the Certificate.txt file */ -/*****************************************************/ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include "libtasn1.h" - - - -static char * -my_ltostr (long v, char *str) -{ - long d, r; - char temp[20]; - int count, k, start; - - if (v < 0) - { - str[0] = '-'; - start = 1; - v = -v; - } - else - start = 0; - - count = 0; - do - { - d = v / 10; - r = v - d * 10; - temp[start + count] = '0' + (char) r; - count++; - v = d; - } - while (v); - - for (k = 0; k < count; k++) - str[k + start] = temp[start + count - k - 1]; - str[count + start] = 0; - return str; -} - - -/******************************************************/ -/* Function : get_name_type */ -/* Description: analyze a structure of type Name */ -/* Parameters: */ -/* char *root: the structure identifier */ -/* char *answer: the string with elements like: */ -/* "C=US O=gov" */ -/******************************************************/ -static void -get_Name_type (ASN1_TYPE cert_def, ASN1_TYPE cert, const char *root, - unsigned char *ans) -{ - int k, k2, result, len; - char name[128], str[1024], str2[1024], name2[128], counter[5], name3[128]; - ASN1_TYPE value = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - char *answer = (char *) ans; - - answer[0] = 0; - k = 1; - do - { - strcpy (name, root); - strcat (name, ".rdnSequence.?"); - my_ltostr (k, counter); - strcat (name, counter); - - len = sizeof (str) - 1; - result = asn1_read_value (cert, name, str, &len); - if (result == ASN1_ELEMENT_NOT_FOUND) - break; - k2 = 1; - do - { - strcpy (name2, name); - strcat (name2, ".?"); - my_ltostr (k2, counter); - strcat (name2, counter); - - len = sizeof (str) - 1; - result = asn1_read_value (cert, name2, str, &len); - if (result == ASN1_ELEMENT_NOT_FOUND) - break; - strcpy (name3, name2); - strcat (name3, ".type"); - - len = sizeof (str) - 1; - result = asn1_read_value (cert, name3, str, &len); - strcpy (name3, name2); - strcat (name3, ".value"); - if (result == ASN1_SUCCESS) - { - len = sizeof (str2); - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-countryName", str2, - &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationName", - &value); - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - result = - asn1_der_decoding (&value, str, len, errorDescription); - - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - - strcpy (name3, str); - - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " C="); - strcat (answer, str); - - asn1_delete_structure (&value); - } - else - { - len = sizeof (str2); - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-organizationName", - str2, &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationName", - &value); - - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - asn1_der_decoding (&value, str, len, errorDescription); - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - strcpy (name3, str); - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " O="); - strcat (answer, str); - asn1_delete_structure (&value); - } - else - { - len = sizeof (str2); - result = - asn1_read_value (cert_def, - "PKIX1Implicit88.id-at-organizationalUnitName", - str2, &len); - if (!strcmp (str, str2)) - { - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationalUnitName", - &value); - len = sizeof (str) - 1; - asn1_read_value (cert, name3, str, &len); - asn1_der_decoding (&value, str, len, - errorDescription); - len = sizeof (str) - 1; - asn1_read_value (value, "", str, &len); /* CHOICE */ - strcpy (name3, str); - len = sizeof (str) - 1; - asn1_read_value (value, name3, str, &len); - str[len] = 0; - strcat (answer, " OU="); - strcat (answer, str); - asn1_delete_structure (&value); - } - } - } - } - k2++; - } - while (1); - k++; - } - while (1); -} - - -/******************************************************/ -/* Function : create_certificate */ -/* Description: creates a certificate named */ -/* "certificate1". Values are the same */ -/* as in rfc2459 Appendix D.1 */ -/* Parameters: */ -/* unsigned char *der: contains the der encoding */ -/* int *der_len: number of bytes of der string */ -/******************************************************/ -static void -create_CRL (ASN1_TYPE cert_def, unsigned char *der, int *der_len) -{ - int result, k, len; - unsigned char str[1024]; - const unsigned char *str2; - ASN1_TYPE crl = ASN1_TYPE_EMPTY; - ASN1_TYPE value = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - int max_len; - - max_len = *der_len; - - result = - asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl); - - /* Use the next 3 lines to visit the empty certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(crl,""); - printf("-----------------\n"); */ - - - /* version: v2(1) */ - result = asn1_write_value (crl, "tbsCertList.version", "v2", 0); - - - /* signature: dsa-with-sha */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); - result = asn1_write_value (crl, "tbsCertList.signature.algorithm", str, 1); - result = - asn1_write_value (crl, "tbsCertList.signature.parameters", NULL, 0); - - - /* issuer: Country="US" Organization="gov" OrganizationUnit="nist" */ - result = asn1_write_value (crl, "tbsCertList.issuer", "rdnSequence", 1); - - result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1); - /* C */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-countryName", str, - &len); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520countryName", &value); - result = asn1_write_value (value, "", "US", 2); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - - asn1_delete_structure (&value); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 4); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 4); - /* O */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationName", str, - &len); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", - str, 8); - result = - asn1_create_element (cert_def, "PKIX1Implicit88.X520OrganizationName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "gov", 3); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - result = asn1_write_value (crl, "tbsCertList.issuer.rdnSequence", "NEW", 1); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST", "NEW", 1); - /* OU */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-at-organizationalUnitName", - str, &len); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.type", - str, 1); - result = - asn1_create_element (cert_def, - "PKIX1Implicit88.X520OrganizationalUnitName", - &value); - result = asn1_write_value (value, "", "printableString", 1); - result = asn1_write_value (value, "printableString", "nist", 4); - *der_len = max_len; - result = asn1_der_coding (value, "", der, der_len, errorDescription); - asn1_delete_structure (&value); - result = - asn1_write_value (crl, "tbsCertList.issuer.rdnSequence.?LAST.?LAST.value", - der, *der_len); - - - /* validity */ - result = asn1_write_value (crl, "tbsCertList.thisUpdate", "utcTime", 1); - result = - asn1_write_value (crl, "tbsCertList.thisUpdate.utcTime", "970801000000Z", - 1); - - result = asn1_write_value (crl, "tbsCertList.nextUpdate", "utcTime", 1); - result = - asn1_write_value (crl, "tbsCertList.nextUpdate.utcTime", "970808000000Z", - 1); - - - /* revokedCertificates */ - result = - asn1_write_value (crl, "tbsCertList.revokedCertificates", "NEW", 1); - str[0] = 18; - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.userCertificate", - str, 1); - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.revocationDate", - "utcTime", 1); - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.revocationDate.utcTime", - "970731000000Z", 1); - - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions", - "NEW", 1); - len = sizeof (str) - 1; - result = asn1_read_value (cert_def, "PKIX1Implicit88.id-ce-cRLReasons", - str, &len); - result = asn1_write_value (crl, "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnID", str, 1); /* reasonCode */ - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.critical", - "FALSE", 1); - str2 = (const unsigned char *) "\x0a\x01\x01"; - result = - asn1_write_value (crl, - "tbsCertList.revokedCertificates.?LAST.crlEntryExtensions.?LAST.extnValue", - str2, 3); - - - /* crlExtensions */ - result = asn1_write_value (crl, "tbsCertList.crlExtensions", NULL, 0); - - - /* signatureAlgorithm: dsa-with-sha */ - len = sizeof (str) - 1; - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str, &len); - result = asn1_write_value (crl, "signatureAlgorithm.algorithm", str, 1); - result = asn1_write_value (crl, "signatureAlgorithm.parameters", NULL, 0); /* NO OPTION */ - - /* signature */ - *der_len = max_len; - result = - asn1_der_coding (crl, "tbsCertList", der, der_len, errorDescription); - if (result != ASN1_SUCCESS) - { - printf ("\n'tbsCertList' encoding creation: ERROR\n"); - return; - } - - /* add the lines for the signature on der[0]..der[der_len-1]: result in str2 */ - result = asn1_write_value (crl, "signature", str2, 46 * 8); - - - /* Use the next 3 lines to visit the certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(crl,""); - printf("-----------------\n"); */ - - *der_len = max_len; - result = asn1_der_coding (crl, "", der, der_len, errorDescription); - if (result != ASN1_SUCCESS) - { - printf ("\n'crl1' encoding creation: ERROR\n"); - return; - } - - /* Print the 'Certificate1' DER encoding */ - printf ("-----------------\nCrl1 Encoding:\nNumber of bytes=%i\n", - *der_len); - for (k = 0; k < *der_len; k++) - printf ("%02x ", der[k]); - printf ("\n-----------------\n"); - - /* Clear the "certificate1" structure */ - asn1_delete_structure (&crl); -} - - - -/******************************************************/ -/* Function : get_certificate */ -/* Description: creates a certificate named */ -/* "certificate2" from a der encoding */ -/* string */ -/* Parameters: */ -/* unsigned char *der: the encoding string */ -/* int der_len: number of bytes of der string */ -/******************************************************/ -static void -get_CRL (ASN1_TYPE cert_def, unsigned char *der, int der_len) -{ - int result, len, start, end; - unsigned char str[1024], str2[1024]; - ASN1_TYPE crl2 = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - - - asn1_create_element (cert_def, "PKIX1Implicit88.CertificateList", &crl2); - - result = asn1_der_decoding (&crl2, der, der_len, errorDescription); - - if (result != ASN1_SUCCESS) - { - printf ("Problems with DER encoding\n"); - return; - } - - - /* issuer */ - get_Name_type (cert_def, crl2, "tbsCertList.issuer", str); - printf ("crl2:\nissuer: %s\n", str); - - - /* Verify sign */ - len = sizeof (str) - 1; - result = asn1_read_value (crl2, "signatureAlgorithm.algorithm", str, &len); - - result = - asn1_read_value (cert_def, "PKIX1Implicit88.id-dsa-with-sha1", str2, - &len); - if (!strcmp ((char *) str, (char *) str2)) - { /* dsa-with-sha */ - - result = asn1_der_decoding_startEnd (crl2, der, der_len, - "tbsCertList", &start, &end); - - /* add the lines to calculate the sha on der[start]..der[end] */ - - result = asn1_read_value (crl2, "signature", str, &len); - - /* compare the previous value to signature ( with issuer public key) */ - } - - /* Use the next 3 lines to visit the certificate */ - /* printf("-----------------\n"); - asn1_visit_tree(crl2,""); - printf("-----------------\n"); */ - - - /* Clear the "crl2" structure */ - asn1_delete_structure (&crl2); -} - -extern const ASN1_ARRAY_TYPE pkix_asn1_tab[]; - -/********************************************************/ -/* Function : main */ -/* Description: reads the certificate description. */ -/* Creates a certificate and calculate */ -/* the der encoding. After that creates */ -/* another certificate from der string */ -/********************************************************/ -int -main (int argc, char *argv[]) -{ - int result, der_len; - unsigned char der[1024]; - ASN1_TYPE PKIX1Implicit88 = ASN1_TYPE_EMPTY; - char errorDescription[ASN1_MAX_ERROR_DESCRIPTION_SIZE]; - - if (1) - result = - asn1_array2tree (pkix_asn1_tab, &PKIX1Implicit88, errorDescription); - else - result = - asn1_parser2tree ("pkix.asn", &PKIX1Implicit88, errorDescription); - - if (result != ASN1_SUCCESS) - { - asn1_perror (result); - printf ("%s\n", errorDescription); - exit (1); - } - - /* Use the following 3 lines to visit the PKIX1Implicit structures */ - /* printf("-----------------\n"); - asn1_visit_tree(cert_def,"PKIX1Implicit88"); - printf("-----------------\n"); */ - - der_len = 1024; - create_CRL (PKIX1Implicit88, der, &der_len); - - - get_CRL (PKIX1Implicit88, der, der_len); - - /* Clear the "PKIX1Implicit88" structures */ - asn1_delete_structure (&PKIX1Implicit88); - - return 0; -} diff --git a/examples/Makefile.am b/examples/Makefile.am deleted file mode 100644 index 520d4ad..0000000 --- a/examples/Makefile.am +++ /dev/null @@ -1,36 +0,0 @@ -## Process this file with automake to produce Makefile.in -# Copyright (C) 2002-2014 Free Software Foundation, Inc. -# -# This file is part of LIBTASN1. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) -AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/gl -I$(top_builddir)/gl - -EXTRA_DIST = asn1Coding_test.asn asn1Coding_test.asg - -LDADD = ../lib/libtasn1.la ../gl/libgnu.la - -noinst_PROGRAMS = CertificateExample CrlExample - -CertificateExample_SOURCES = CertificateExample.c pkix_asn1_tab.c pkix.asn - -CrlExample_SOURCES = CrlExample.c pkix_asn1_tab.c pkix.asn - -BUILT_SOURCES = pkix_asn1_tab.c -MAINTAINERCLEANFILES = pkix_asn1_tab.c - -pkix_asn1_tab.c: $(srcdir)/pkix.asn - ../src/asn1Parser -o $@ $(srcdir)/pkix.asn diff --git a/examples/asn1Coding_test.asg b/examples/asn1Coding_test.asg deleted file mode 100644 index b0f9495..0000000 --- a/examples/asn1Coding_test.asg +++ /dev/null @@ -1,6 +0,0 @@ - - -TEST Test.Sequence1 - -int1 10 -int2 -10 diff --git a/examples/asn1Coding_test.asn b/examples/asn1Coding_test.asn deleted file mode 100644 index a3cd7f0..0000000 --- a/examples/asn1Coding_test.asn +++ /dev/null @@ -1,29 +0,0 @@ -Test { } - -DEFINITIONS IMPLICIT TAGS ::= - -BEGIN - -Sequence1 ::= SEQUENCE { - int1 INTEGER, - int2 INTEGER -} - -END - --- Copyright (C) 2002-2014 Free Software Foundation, Inc. --- --- This file is part of LIBTASN1. --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program. If not, see <http://www.gnu.org/licenses/>. diff --git a/examples/pkix.asn b/examples/pkix.asn deleted file mode 100644 index 973bdcb..0000000 --- a/examples/pkix.asn +++ /dev/null @@ -1,954 +0,0 @@ --- Copyright (C) 2002-2014 Free Software Foundation, Inc. --- --- This file is part of LIBTASN1. --- --- This program is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program. If not, see <http://www.gnu.org/licenses/>. - -PKIX1Implicit88 {iso(1) identified-organization(3) dod(6) internet(1) - security(5) mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit-88(2)} - -DEFINITIONS IMPLICIT TAGS ::= - -BEGIN - --- ISO arc for standard certificate and CRL extensions - -id-ce OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 29} - - --- authority key identifier OID and syntax - -id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 } - -AuthorityKeyIdentifier ::= SEQUENCE { - keyIdentifier [0] KeyIdentifier OPTIONAL, - authorityCertIssuer [1] GeneralNames OPTIONAL, - authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL } - -- authorityCertIssuer and authorityCertSerialNumber shall both - -- be present or both be absgent - -KeyIdentifier ::= OCTET STRING - --- subject key identifier OID and syntax - -id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 } - -SubjectKeyIdentifier ::= KeyIdentifier - --- key usage extension OID and syntax - -id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 } - -KeyUsage ::= BIT STRING { - digitalSignature (0), - nonRepudiation (1), - keyEncipherment (2), - dataEncipherment (3), - keyAgreement (4), - keyCertSign (5), - cRLSign (6), - encipherOnly (7), - decipherOnly (8) } - --- private key usage period extension OID and syntax - -id-ce-privateKeyUsagePeriod OBJECT IDENTIFIER ::= { id-ce 16 } - -PrivateKeyUsagePeriod ::= SEQUENCE { - notBefore [0] GeneralizedTime OPTIONAL, - notAfter [1] GeneralizedTime OPTIONAL } - -- either notBefore or notAfter shall be present - --- certificate policies extension OID and syntax - -id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 } - -CertificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation - -PolicyInformation ::= SEQUENCE { - policyIdentifier CertPolicyId, - policyQualifiers SEQUENCE SIZE (1..MAX) OF - PolicyQualifierInfo OPTIONAL } - -CertPolicyId ::= OBJECT IDENTIFIER - -PolicyQualifierInfo ::= SEQUENCE { - policyQualifierId PolicyQualifierId, - qualifier ANY DEFINED BY policyQualifierId } - --- Implementations that recognize additional policy qualifiers shall --- augment the following definition for PolicyQualifierId - -PolicyQualifierId ::= - OBJECT IDENTIFIER -- ( id-qt-cps | id-qt-unotice ) - --- CPS pointer qualifier - -CPSuri ::= IA5String - --- user notice qualifier - -UserNotice ::= SEQUENCE { - noticeRef NoticeReference OPTIONAL, - explicitText DisplayText OPTIONAL} - -NoticeReference ::= SEQUENCE { - organization DisplayText, - noticeNumbers SEQUENCE OF INTEGER } - -DisplayText ::= CHOICE { - visibleString VisibleString (SIZE (1..200)), - bmpString BMPString (SIZE (1..200)), - utf8String UTF8String (SIZE (1..200)) } - --- policy mapping extension OID and syntax - -id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 } - -PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE { - issuerDomainPolicy CertPolicyId, - subjectDomainPolicy CertPolicyId } - --- subject alternative name extension OID and syntax - -id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 } - -SubjectAltName ::= GeneralNames - -GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName - -GeneralName ::= CHOICE { - otherName [0] AnotherName, - rfc822Name [1] IA5String, - dNSName [2] IA5String, - x400Address [3] ORAddress, - directoryName [4] Name, - ediPartyName [5] EDIPartyName, - uniformResourceIdentifier [6] IA5String, - iPAddress [7] OCTET STRING, - registeredID [8] OBJECT IDENTIFIER } - --- AnotherName replaces OTHER-NAME ::= TYPE-IDENTIFIER, as --- TYPE-IDENTIFIER is not supported in the '88 ASN.1 syntax - -AnotherName ::= SEQUENCE { - type-id OBJECT IDENTIFIER, - value [0] EXPLICIT ANY DEFINED BY type-id } - -EDIPartyName ::= SEQUENCE { - nameAssigner [0] DirectoryString OPTIONAL, - partyName [1] DirectoryString } - --- issuer alternative name extension OID and syntax - -id-ce-issuerAltName OBJECT IDENTIFIER ::= { id-ce 18 } - -IssuerAltName ::= GeneralNames - -id-ce-subjectDirectoryAttributes OBJECT IDENTIFIER ::= { id-ce 9 } - -SubjectDirectoryAttributes ::= SEQUENCE SIZE (1..MAX) OF Attribute - --- basic constraints extension OID and syntax - -id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 } - -BasicConstraints ::= SEQUENCE { - cA BOOLEAN DEFAULT FALSE, - pathLenConstraint INTEGER (0..MAX) OPTIONAL } - --- name constraints extension OID and syntax - -id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 } - -NameConstraints ::= SEQUENCE { - permittedSubtrees [0] GeneralSubtrees OPTIONAL, - excludedSubtrees [1] GeneralSubtrees OPTIONAL } - -GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree - -GeneralSubtree ::= SEQUENCE { - base GeneralName, - minimum [0] BaseDistance DEFAULT 0, - maximum [1] BaseDistance OPTIONAL } - -BaseDistance ::= INTEGER (0..MAX) - --- policy constraints extension OID and syntax - -id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 } - -PolicyConstraints ::= SEQUENCE { - requireExplicitPolicy [0] SkipCerts OPTIONAL, - inhibitPolicyMapping [1] SkipCerts OPTIONAL } - -SkipCerts ::= INTEGER (0..MAX) - --- CRL distribution points extension OID and syntax - -id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= {id-ce 31} - -CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint - -DistributionPoint ::= SEQUENCE { - distributionPoint [0] DistributionPointName OPTIONAL, - reasons [1] ReasonFlags OPTIONAL, - cRLIssuer [2] GeneralNames OPTIONAL } - -DistributionPointName ::= CHOICE { - fullName [0] GeneralNames, - nameRelativeToCRLIssuer [1] RelativeDistinguishedName } - - - -ReasonFlags ::= BIT STRING { - unused (0), - keyCompromise (1), - cACompromise (2), - affiliationChanged (3), - superseded (4), - cessationOfOperation (5), - certificateHold (6) } - --- extended key usage extension OID and syntax - -id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37} - -ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId - -KeyPurposeId ::= OBJECT IDENTIFIER - --- extended key purpose OIDs -id-kp-serverAuth OBJECT IDENTIFIER ::= { id-kp 1 } -id-kp-clientAuth OBJECT IDENTIFIER ::= { id-kp 2 } -id-kp-codeSigning OBJECT IDENTIFIER ::= { id-kp 3 } -id-kp-emailProtection OBJECT IDENTIFIER ::= { id-kp 4 } -id-kp-ipsecEndSystem OBJECT IDENTIFIER ::= { id-kp 5 } -id-kp-ipsecTunnel OBJECT IDENTIFIER ::= { id-kp 6 } -id-kp-ipsecUser OBJECT IDENTIFIER ::= { id-kp 7 } -id-kp-timeStamping OBJECT IDENTIFIER ::= { id-kp 8 } - --- authority info access - -id-pe-authorityInfoAccess OBJECT IDENTIFIER ::= { id-pe 1 } - -AuthorityInfoAccessSyntax ::= - SEQUENCE SIZE (1..MAX) OF AccessDescription - -AccessDescription ::= SEQUENCE { - accessMethod OBJECT IDENTIFIER, - accessLocation GeneralName } - --- CRL number extension OID and syntax - -id-ce-cRLNumber OBJECT IDENTIFIER ::= { id-ce 20 } - -CRLNumber ::= INTEGER (0..MAX) - --- issuing distribution point extension OID and syntax - -id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } - -IssuingDistributionPoint ::= SEQUENCE { - distributionPoint [0] DistributionPointName OPTIONAL, - onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, - onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, - onlySomeReasons [3] ReasonFlags OPTIONAL, - indirectCRL [4] BOOLEAN DEFAULT FALSE } - - -id-ce-deltaCRLIndicator OBJECT IDENTIFIER ::= { id-ce 27 } - --- deltaCRLIndicator ::= BaseCRLNumber - -BaseCRLNumber ::= CRLNumber - --- CRL reasons extension OID and syntax - -id-ce-cRLReasons OBJECT IDENTIFIER ::= { id-ce 21 } - -CRLReason ::= ENUMERATED { - unspecified (0), - keyCompromise (1), - cACompromise (2), - affiliationChanged (3), - superseded (4), - cessationOfOperation (5), - certificateHold (6), - removeFromCRL (8) } - --- certificate issuer CRL entry extension OID and syntax - -id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } - -CertificateIssuer ::= GeneralNames - --- hold instruction extension OID and syntax - -id-ce-holdInstructionCode OBJECT IDENTIFIER ::= { id-ce 23 } - -HoldInstructionCode ::= OBJECT IDENTIFIER - --- ANSI x9 holdinstructions - --- ANSI x9 arc holdinstruction arc -holdInstruction OBJECT IDENTIFIER ::= - {joint-iso-itu-t(2) member-body(2) us(840) x9cm(10040) 2} - --- ANSI X9 holdinstructions referenced by this standard -id-holdinstruction-none OBJECT IDENTIFIER ::= - {holdInstruction 1} -- deprecated -id-holdinstruction-callissuer OBJECT IDENTIFIER ::= - {holdInstruction 2} -id-holdinstruction-reject OBJECT IDENTIFIER ::= - {holdInstruction 3} - --- invalidity date CRL entry extension OID and syntax - -id-ce-invalidityDate OBJECT IDENTIFIER ::= { id-ce 24 } - -InvalidityDate ::= GeneralizedTime - - --- -------------------------------------- --- EXPLICIT --- -------------------------------------- - --- UNIVERSAL Types defined in '93 and '98 ASN.1 --- but required by this specification - -VisibleString ::= [UNIVERSAL 26] IMPLICIT OCTET STRING - -NumericString ::= [UNIVERSAL 18] IMPLICIT OCTET STRING - -IA5String ::= [UNIVERSAL 22] IMPLICIT OCTET STRING - -TeletexString ::= [UNIVERSAL 20] IMPLICIT OCTET STRING - -PrintableString ::= [UNIVERSAL 19] IMPLICIT OCTET STRING - -UniversalString ::= [UNIVERSAL 28] IMPLICIT OCTET STRING - -- UniversalString is defined in ASN.1:1993 - -BMPString ::= [UNIVERSAL 30] IMPLICIT OCTET STRING - -- BMPString is the subtype of UniversalString and models - -- the Basic Multilingual Plane of ISO/IEC/ITU 10646-1 - -UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING - -- The content of this type conforms to RFC 2279. - - --- PKIX specific OIDs - -id-pkix OBJECT IDENTIFIER ::= - { iso(1) identified-organization(3) dod(6) internet(1) - security(5) mechanisms(5) pkix(7) } - --- PKIX arcs - -id-pe OBJECT IDENTIFIER ::= { id-pkix 1 } - -- arc for private certificate extensions -id-qt OBJECT IDENTIFIER ::= { id-pkix 2 } - -- arc for policy qualifier types -id-kp OBJECT IDENTIFIER ::= { id-pkix 3 } - -- arc for extended key purpose OIDS -id-ad OBJECT IDENTIFIER ::= { id-pkix 48 } - -- arc for access descriptors - --- policyQualifierIds for Internet policy qualifiers - -id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 } - -- OID for CPS qualifier -id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 } - -- OID for user notice qualifier - --- access descriptor definitions - -id-ad-ocsp OBJECT IDENTIFIER ::= { id-ad 1 } -id-ad-caIssuers OBJECT IDENTIFIER ::= { id-ad 2 } - --- attribute data types -- - -Attribute ::= SEQUENCE { - type AttributeType, - values SET OF AttributeValue - -- at least one value is required -- -} - -AttributeType ::= OBJECT IDENTIFIER - -AttributeValue ::= ANY - -AttributeTypeAndValue ::= SEQUENCE { - type AttributeType, - value AttributeValue } - --- suggested naming attributes: Definition of the following --- information object set may be augmented to meet local --- requirements. Note that deleting members of the set may --- prevent interoperability with conforming implementations. --- presented in pairs: the AttributeType followed by the --- type definition for the corresponding AttributeValue - --- Arc for standard naming attributes -id-at OBJECT IDENTIFIER ::= {joint-iso-ccitt(2) ds(5) 4} - --- Attributes of type NameDirectoryString -id-at-name AttributeType ::= {id-at 41} -id-at-surname AttributeType ::= {id-at 4} -id-at-givenName AttributeType ::= {id-at 42} -id-at-initials AttributeType ::= {id-at 43} -id-at-generationQualifier AttributeType ::= {id-at 44} - -X520name ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-name)), - printableString PrintableString (SIZE (1..ub-name)), - universalString UniversalString (SIZE (1..ub-name)), - utf8String UTF8String (SIZE (1..ub-name)), - bmpString BMPString (SIZE(1..ub-name)) } - --- - -id-at-commonName AttributeType ::= {id-at 3} - -X520CommonName ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-common-name)), - printableString PrintableString (SIZE (1..ub-common-name)), - universalString UniversalString (SIZE (1..ub-common-name)), - utf8String UTF8String (SIZE (1..ub-common-name)), - bmpString BMPString (SIZE(1..ub-common-name)) } - --- - -id-at-localityName AttributeType ::= {id-at 7} - -X520LocalityName ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-locality-name)), - printableString PrintableString (SIZE (1..ub-locality-name)), - universalString UniversalString (SIZE (1..ub-locality-name)), - utf8String UTF8String (SIZE (1..ub-locality-name)), - bmpString BMPString (SIZE(1..ub-locality-name)) } - --- - -id-at-stateOrProvinceName AttributeType ::= {id-at 8} - -X520StateOrProvinceName ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-state-name)), - printableString PrintableString (SIZE (1..ub-state-name)), - universalString UniversalString (SIZE (1..ub-state-name)), - utf8String UTF8String (SIZE (1..ub-state-name)), - bmpString BMPString (SIZE(1..ub-state-name)) } - --- - -id-at-organizationName AttributeType ::= {id-at 10} - -X520OrganizationName ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-organization-name)), - printableString PrintableString (SIZE (1..ub-organization-name)), - universalString UniversalString (SIZE (1..ub-organization-name)), - utf8String UTF8String (SIZE (1..ub-organization-name)), - bmpString BMPString (SIZE(1..ub-organization-name)) } - --- - -id-at-organizationalUnitName AttributeType ::= {id-at 11} - -X520OrganizationalUnitName ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-organizational-unit-name)), - printableString PrintableString - (SIZE (1..ub-organizational-unit-name)), - universalString UniversalString - (SIZE (1..ub-organizational-unit-name)), - utf8String UTF8String (SIZE (1..ub-organizational-unit-name)), - bmpString BMPString (SIZE(1..ub-organizational-unit-name)) } - --- - -id-at-title AttributeType ::= {id-at 12} - -X520Title ::= CHOICE { - teletexString TeletexString (SIZE (1..ub-title)), - printableString PrintableString (SIZE (1..ub-title)), - universalString UniversalString (SIZE (1..ub-title)), - utf8String UTF8String (SIZE (1..ub-title)), - bmpString BMPString (SIZE(1..ub-title)) } - --- - -id-at-dnQualifier AttributeType ::= {id-at 46} -X520dnQualifier ::= PrintableString - -id-at-countryName AttributeType ::= {id-at 6} -X520countryName ::= PrintableString (SIZE (2)) -- IS 3166 codes - - -- Legacy attributes - -pkcs-9 OBJECT IDENTIFIER ::= - { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 9 } - -emailAddress AttributeType ::= { pkcs-9 1 } - -Pkcs9email ::= IA5String (SIZE (1..ub-emailaddress-length)) - --- naming data types -- - -Name ::= CHOICE { -- only one possibility for now -- - rdnSequence RDNSequence } - -RDNSequence ::= SEQUENCE OF RelativeDistinguishedName - -DistinguishedName ::= RDNSequence - -RelativeDistinguishedName ::= - SET SIZE (1 .. MAX) OF AttributeTypeAndValue - --- Directory string type -- - -DirectoryString ::= CHOICE { - teletexString TeletexString (SIZE (1..MAX)), - printableString PrintableString (SIZE (1..MAX)), - universalString UniversalString (SIZE (1..MAX)), - utf8String UTF8String (SIZE (1..MAX)), - bmpString BMPString (SIZE(1..MAX)) } - - --- -------------------------------------------------------- --- certificate and CRL specific structures begin here --- -------------------------------------------------------- - -Certificate ::= SEQUENCE { - tbsCertificate TBSCertificate, - signatureAlgorithm AlgorithmIdentifier, - signature BIT STRING } - -TBSCertificate ::= SEQUENCE { - version [0] EXPLICIT Version DEFAULT v1, - serialNumber CertificateSerialNumber, - signature AlgorithmIdentifier, - issuer Name, - validity Validity, - subject Name, - subjectPublicKeyInfo SubjectPublicKeyInfo, - issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, - -- If present, version shall be v2 or v3 - subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, - -- If present, version shall be v2 or v3 - extensions [3] EXPLICIT Extensions OPTIONAL - -- If present, version shall be v3 -- -} - -Version ::= INTEGER { v1(0), v2(1), v3(2) } - -CertificateSerialNumber ::= INTEGER - -Validity ::= SEQUENCE { - notBefore Time, - notAfter Time } - -Time ::= CHOICE { - utcTime UTCTime, - generalTime GeneralizedTime } - -UniqueIdentifier ::= BIT STRING - -SubjectPublicKeyInfo ::= SEQUENCE { - algorithm AlgorithmIdentifier, - subjectPublicKey BIT STRING } - -Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension - -Extension ::= SEQUENCE { - extnID OBJECT IDENTIFIER, - critical BOOLEAN DEFAULT FALSE, - extnValue OCTET STRING } - - --- ------------------------------------------ --- CRL structures --- ------------------------------------------ - -CertificateList ::= SEQUENCE { - tbsCertList TBSCertList, - signatureAlgorithm AlgorithmIdentifier, - signature BIT STRING } - -TBSCertList ::= SEQUENCE { - version Version OPTIONAL, - -- if present, shall be v2 - signature AlgorithmIdentifier, - issuer Name, - thisUpdate Time, - nextUpdate Time OPTIONAL, - revokedCertificates SEQUENCE OF SEQUENCE { - userCertificate CertificateSerialNumber, - revocationDate Time, - crlEntryExtensions Extensions OPTIONAL - -- if present, shall be v2 - } OPTIONAL, - crlExtensions [0] EXPLICIT Extensions OPTIONAL - -- if present, shall be v2 -- -} - --- Version, Time, CertificateSerialNumber, and Extensions were --- defined earlier for use in the certificate structure - -AlgorithmIdentifier ::= SEQUENCE { - algorithm OBJECT IDENTIFIER, - parameters ANY DEFINED BY algorithm OPTIONAL } - -- contains a value of the type - -- registered for use with the - -- algorithm object identifier value - --- Algorithm OIDs and parameter structures - -pkcs-1 OBJECT IDENTIFIER ::= { - iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1 } - -rsaEncryption OBJECT IDENTIFIER ::= { pkcs-1 1 } - -md2WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 2 } - -md5WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 4 } - -sha1WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 5 } - -id-dsa-with-sha1 OBJECT IDENTIFIER ::= { - iso(1) member-body(2) us(840) x9-57 (10040) x9algorithm(4) 3 } - -Dss-Sig-Value ::= SEQUENCE { - r INTEGER, - s INTEGER } - -dhpublicnumber OBJECT IDENTIFIER ::= { - iso(1) member-body(2) us(840) ansi-x942(10046) number-type(2) 1 } - -DomainParameters ::= SEQUENCE { - p INTEGER, -- odd prime, p=jq +1 - g INTEGER, -- generator, g - q INTEGER, -- factor of p-1 - j INTEGER OPTIONAL, -- subgroup factor, j>= 2 - validationParms ValidationParms OPTIONAL } - -ValidationParms ::= SEQUENCE { - seed BIT STRING, - pgenCounter INTEGER } - -id-dsa OBJECT IDENTIFIER ::= { - iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) 1 } - -Dss-Parms ::= SEQUENCE { - p INTEGER, - q INTEGER, - g INTEGER } - --- x400 address syntax starts here --- OR Names - -ORAddress ::= SEQUENCE { - built-in-standard-attributes BuiltInStandardAttributes, - built-in-domain-defined-attributes - BuiltInDomainDefinedAttributes OPTIONAL, - -- see also teletex-domain-defined-attributes - extension-attributes ExtensionAttributes OPTIONAL } --- The OR-address is semantically absent from the OR-name if the --- built-in-standard-attribute sequence is empty and the --- built-in-domain-defined-attributes and extension-attributes are --- both omitted. - --- Built-in Standard Attributes - -BuiltInStandardAttributes ::= SEQUENCE { - country-name CountryName OPTIONAL, - administration-domain-name AdministrationDomainName OPTIONAL, - network-address [0] EXPLICIT NetworkAddress OPTIONAL, - -- see also extended-network-address - terminal-identifier [1] EXPLICIT TerminalIdentifier OPTIONAL, - private-domain-name [2] EXPLICIT PrivateDomainName OPTIONAL, - organization-name [3] EXPLICIT OrganizationName OPTIONAL, - -- see also teletex-organization-name - numeric-user-identifier [4] EXPLICIT NumericUserIdentifier OPTIONAL, - personal-name [5] EXPLICIT PersonalName OPTIONAL, - -- see also teletex-personal-name - organizational-unit-names [6] EXPLICIT OrganizationalUnitNames OPTIONAL - -- see also teletex-organizational-unit-names -- -} - -CountryName ::= [APPLICATION 1] CHOICE { - x121-dcc-code NumericString - (SIZE (ub-country-name-numeric-length)), - iso-3166-alpha2-code PrintableString - (SIZE (ub-country-name-alpha-length)) } - -AdministrationDomainName ::= [APPLICATION 2] EXPLICIT CHOICE { - numeric NumericString (SIZE (0..ub-domain-name-length)), - printable PrintableString (SIZE (0..ub-domain-name-length)) } - -NetworkAddress ::= X121Address -- see also extended-network-address - -X121Address ::= NumericString (SIZE (1..ub-x121-address-length)) - -TerminalIdentifier ::= PrintableString (SIZE (1..ub-terminal-id-length)) - -PrivateDomainName ::= CHOICE { - numeric NumericString (SIZE (1..ub-domain-name-length)), - printable PrintableString (SIZE (1..ub-domain-name-length)) } - -OrganizationName ::= PrintableString - (SIZE (1..ub-organization-name-length)) --- see also teletex-organization-name - -NumericUserIdentifier ::= NumericString - (SIZE (1..ub-numeric-user-id-length)) - -PersonalName ::= SET { - surname [0] PrintableString (SIZE (1..ub-surname-length)), - given-name [1] PrintableString - (SIZE (1..ub-given-name-length)) OPTIONAL, - initials [2] PrintableString (SIZE (1..ub-initials-length)) OPTIONAL, - generation-qualifier [3] PrintableString - (SIZE (1..ub-generation-qualifier-length)) OPTIONAL } --- see also teletex-personal-name - -OrganizationalUnitNames ::= SEQUENCE SIZE (1..ub-organizational-units) - OF OrganizationalUnitName --- see also teletex-organizational-unit-names - -OrganizationalUnitName ::= PrintableString (SIZE - (1..ub-organizational-unit-name-length)) - --- Built-in Domain-defined Attributes - -BuiltInDomainDefinedAttributes ::= SEQUENCE SIZE - (1..ub-domain-defined-attributes) OF - BuiltInDomainDefinedAttribute - -BuiltInDomainDefinedAttribute ::= SEQUENCE { - type PrintableString (SIZE - (1..ub-domain-defined-attribute-type-length)), - value PrintableString (SIZE - (1..ub-domain-defined-attribute-value-length))} - --- Extension Attributes - -ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF - ExtensionAttribute - -ExtensionAttribute ::= SEQUENCE { - extension-attribute-type [0] EXPLICIT INTEGER (0..ub-extension-attributes), - extension-attribute-value [1] EXPLICIT - ANY DEFINED BY extension-attribute-type } - --- Extension types and attribute values --- - -common-name INTEGER ::= 1 - -CommonName ::= PrintableString (SIZE (1..ub-common-name-length)) - -teletex-common-name INTEGER ::= 2 - -TeletexCommonName ::= TeletexString (SIZE (1..ub-common-name-length)) - -teletex-organization-name INTEGER ::= 3 - -TeletexOrganizationName ::= - TeletexString (SIZE (1..ub-organization-name-length)) - -teletex-personal-name INTEGER ::= 4 - -TeletexPersonalName ::= SET { - surname [0] EXPLICIT TeletexString (SIZE (1..ub-surname-length)), - given-name [1] EXPLICIT TeletexString - (SIZE (1..ub-given-name-length)) OPTIONAL, - initials [2] EXPLICIT TeletexString (SIZE (1..ub-initials-length)) OPTIONAL, - generation-qualifier [3] EXPLICIT TeletexString (SIZE - (1..ub-generation-qualifier-length)) OPTIONAL } - -teletex-organizational-unit-names INTEGER ::= 5 - -TeletexOrganizationalUnitNames ::= SEQUENCE SIZE - (1..ub-organizational-units) OF TeletexOrganizationalUnitName - -TeletexOrganizationalUnitName ::= TeletexString - (SIZE (1..ub-organizational-unit-name-length)) - -pds-name INTEGER ::= 7 - -PDSName ::= PrintableString (SIZE (1..ub-pds-name-length)) - -physical-delivery-country-name INTEGER ::= 8 - -PhysicalDeliveryCountryName ::= CHOICE { - x121-dcc-code NumericString (SIZE (ub-country-name-numeric-length)), - iso-3166-alpha2-code PrintableString - (SIZE (ub-country-name-alpha-length)) } - -postal-code INTEGER ::= 9 - -PostalCode ::= CHOICE { - numeric-code NumericString (SIZE (1..ub-postal-code-length)), - printable-code PrintableString (SIZE (1..ub-postal-code-length)) } - -physical-delivery-office-name INTEGER ::= 10 - -PhysicalDeliveryOfficeName ::= PDSParameter - -physical-delivery-office-number INTEGER ::= 11 - -PhysicalDeliveryOfficeNumber ::= PDSParameter - -extension-OR-address-components INTEGER ::= 12 - -ExtensionORAddressComponents ::= PDSParameter - -physical-delivery-personal-name INTEGER ::= 13 - -PhysicalDeliveryPersonalName ::= PDSParameter - -physical-delivery-organization-name INTEGER ::= 14 - -PhysicalDeliveryOrganizationName ::= PDSParameter - -extension-physical-delivery-address-components INTEGER ::= 15 - -ExtensionPhysicalDeliveryAddressComponents ::= PDSParameter - -unformatted-postal-address INTEGER ::= 16 - -UnformattedPostalAddress ::= SET { - printable-address SEQUENCE SIZE (1..ub-pds-physical-address-lines) OF - PrintableString (SIZE (1..ub-pds-parameter-length)) OPTIONAL, - teletex-string TeletexString - (SIZE (1..ub-unformatted-address-length)) OPTIONAL } - -street-address INTEGER ::= 17 - -StreetAddress ::= PDSParameter - -post-office-box-address INTEGER ::= 18 - -PostOfficeBoxAddress ::= PDSParameter - -poste-restante-address INTEGER ::= 19 - -PosteRestanteAddress ::= PDSParameter - -unique-postal-name INTEGER ::= 20 - -UniquePostalName ::= PDSParameter - -local-postal-attributes INTEGER ::= 21 - -LocalPostalAttributes ::= PDSParameter - -PDSParameter ::= SET { - printable-string PrintableString - (SIZE(1..ub-pds-parameter-length)) OPTIONAL, - teletex-string TeletexString - (SIZE(1..ub-pds-parameter-length)) OPTIONAL } - -extended-network-address INTEGER ::= 22 - -ExtendedNetworkAddress ::= CHOICE { - e163-4-address SEQUENCE { - number [0] EXPLICIT NumericString (SIZE (1..ub-e163-4-number-length)), - sub-address [1] EXPLICIT NumericString - (SIZE (1..ub-e163-4-sub-address-length)) OPTIONAL }, - psap-address [0] EXPLICIT PresentationAddress } - -PresentationAddress ::= SEQUENCE { - pSelector [0] EXPLICIT OCTET STRING OPTIONAL, - sSelector [1] EXPLICIT OCTET STRING OPTIONAL, - tSelector [2] EXPLICIT OCTET STRING OPTIONAL, - nAddresses [3] EXPLICIT SET SIZE (1..MAX) OF OCTET STRING } - -terminal-type INTEGER ::= 23 - -TerminalType ::= INTEGER { - telex (3), - teletex (4), - g3-facsimile (5), - g4-facsimile (6), - ia5-terminal (7), - videotex (8) } (0..ub-integer-options) - --- Extension Domain-defined Attributes - -teletex-domain-defined-attributes INTEGER ::= 6 - -TeletexDomainDefinedAttributes ::= SEQUENCE SIZE - (1..ub-domain-defined-attributes) OF TeletexDomainDefinedAttribute - -TeletexDomainDefinedAttribute ::= SEQUENCE { - type TeletexString - (SIZE (1..ub-domain-defined-attribute-type-length)), - value TeletexString - (SIZE (1..ub-domain-defined-attribute-value-length)) } - --- specifications of Upper Bounds shall be regarded as mandatory --- from Annex B of ITU-T X.411 Reference Definition of MTS Parameter --- Upper Bounds - --- Upper Bounds -ub-name INTEGER ::= 32768 -ub-common-name INTEGER ::= 64 -ub-locality-name INTEGER ::= 128 -ub-state-name INTEGER ::= 128 -ub-organization-name INTEGER ::= 64 -ub-organizational-unit-name INTEGER ::= 64 -ub-title INTEGER ::= 64 -ub-match INTEGER ::= 128 - -ub-emailaddress-length INTEGER ::= 128 - -ub-common-name-length INTEGER ::= 64 -ub-country-name-alpha-length INTEGER ::= 2 -ub-country-name-numeric-length INTEGER ::= 3 -ub-domain-defined-attributes INTEGER ::= 4 -ub-domain-defined-attribute-type-length INTEGER ::= 8 -ub-domain-defined-attribute-value-length INTEGER ::= 128 -ub-domain-name-length INTEGER ::= 16 -ub-extension-attributes INTEGER ::= 256 -ub-e163-4-number-length INTEGER ::= 15 -ub-e163-4-sub-address-length INTEGER ::= 40 -ub-generation-qualifier-length INTEGER ::= 3 -ub-given-name-length INTEGER ::= 16 -ub-initials-length INTEGER ::= 5 -ub-integer-options INTEGER ::= 256 -ub-numeric-user-id-length INTEGER ::= 32 -ub-organization-name-length INTEGER ::= 64 -ub-organizational-unit-name-length INTEGER ::= 32 -ub-organizational-units INTEGER ::= 4 -ub-pds-name-length INTEGER ::= 16 -ub-pds-parameter-length INTEGER ::= 30 -ub-pds-physical-address-lines INTEGER ::= 6 -ub-postal-code-length INTEGER ::= 16 -ub-surname-length INTEGER ::= 40 -ub-terminal-id-length INTEGER ::= 24 -ub-unformatted-address-length INTEGER ::= 180 -ub-x121-address-length INTEGER ::= 16 - --- Note - upper bounds on string types, such as TeletexString, are --- measured in characters. Excepting PrintableString or IA5String, a --- significantly greater number of octets will be required to hold --- such a value. As a minimum, 16 octets, or twice the specified upper --- bound, whichever is the larger, should be allowed for TeletexString. --- For UTF8String or UniversalString at least four times the upper --- bound should be allowed. - - - -END |