module PKIX1Explicit88_Types {

import from PKIX1Explicit88 all;
import from Native_Functions all;

external function dec_X520name(in octetstring stream) return X520name;
external function enc_X520name(in X520name msg) return octetstring;

external function dec_X520CommonName(in octetstring stream) return X520CommonName;
external function enc_X520CommonName(in X520CommonName msg) return octetstring;

external function dec_X520LocalityName(in octetstring stream) return X520LocalityName;
external function enc_X520LocalityName(in X520LocalityName msg) return octetstring;

external function dec_X520StateOrProvinceName(in octetstring stream) return X520StateOrProvinceName;
external function enc_X520StateOrProvinceName(in X520StateOrProvinceName msg) return octetstring;

external function dec_X520OrganizationName(in octetstring stream) return X520OrganizationName;
external function enc_X520OrganizationName(in X520OrganizationName msg) return octetstring;

external function dec_X520OrganizationalUnitName(in octetstring stream) return X520OrganizationalUnitName;
external function enc_X520OrganizationalUnitName(in X520OrganizationalUnitName msg) return octetstring;

external function dec_X520Title(in octetstring stream) return X520Title;
external function enc_X520Title(in X520Title msg) return octetstring;

external function dec_X520dnQualifier(in octetstring stream) return X520dnQualifier;
external function enc_X520dnQualifier(in X520dnQualifier msg) return octetstring;

external function dec_X520countryName(in octetstring stream) return X520countryName;
external function enc_X520countryName(in X520countryName msg) return octetstring;

external function dec_X520SerialNumber(in octetstring stream) return X520SerialNumber;
external function enc_X520SerialNumber(in X520SerialNumber msg) return octetstring;

external function dec_X520Pseudonym(in octetstring stream) return X520Pseudonym;
external function enc_X520Pseudonym(in X520Pseudonym msg) return octetstring;

external function dec_Certificate(in octetstring stream) return Certificate;
external function enc_Certificate(in Certificate msg) return octetstring;

}
