2 Public key records

This chapter briefly describes Erlang records derived from ASN1 specifications used to handle public and private keys. The intent is to describe the data types and not to specify the semantics of each component. For information on the semantics, please see the relevant standards and RFCs.

Use the following include directive to get access to the records and constant macros described in the following sections.

 -include_lib("public_key/include/public_key.hrl"). 

2.1  Common Data Types

Common non-standard Erlang data types used to described the record fields in the below sections are defined in public key reference manual

2.2  RSA as defined by the PKCS-1 standard and RFC 3447

#'RSAPublicKey'{
	  modulus,       % integer()
	  publicExponent % integer()
	  }.

#'RSAPrivateKey'{
          version,         % two-prime | multi
	  modulus,         % integer()
	  publicExponent,  % integer()
	  privateExponent, % integer()
	  prime1,          % integer() 
	  prime2,          % integer()
	  exponent1,       % integer()
	  exponent2,       % integer()
	  coefficient,     % integer()
	  otherPrimeInfos  % [#OtherPrimeInfo{}] | asn1_NOVALUE
	 }.

#'OtherPrimeInfo'{
	prime,           % integer()
	exponent,        % integer()
	coefficient      % integer()
 	 }.	 
    

2.3  DSA as defined by Digital Signature Standard (NIST FIPS PUB 186-2)

	 
#'DSAPrivateKey',{
	  version,      % integer()
	  p,            % integer()
	  q,            % integer()
	  g,            % integer()
	  y,            % integer()
	  x             % integer()
	  }.

#'Dss-Parms',{
         p,         % integer()
	 q,         % integer()
	 g          % integer()
	 }. 
    

2.4  ECC (Elliptic Curve) RFC 5480

	 
#'ECPrivateKey'{
          version,       % integer()
	  privateKey,    % octet_string()  
	  parameters,    % der_encoded() - {'EcpkParameters', #'ECParameters'{}} |
	                                   {'EcpkParameters', {namedCurve, oid()}} |
	                                   {'EcpkParameters', 'NULL'} % Inherited by CA
	  publicKey      % bitstring()
	  }.
	  
#'ECParameters'{
      version,    % integer()
      fieldID,    % #'FieldID'{}
      curve,      % #'Curve'{}
      base,       % octet_string()       
      order,      % integer()        
      cofactor    % integer()
      }.
      
#'Curve'{
	a,        % octet_string()
	b,        % octet_string() 
	seed      % bitstring() - optional

	}.

#'FieldID'{
	fieldType,    % oid()
	parameters    % Depending on fieldType
	}.

#'ECPoint'{
      point %  octet_string() - the public key
      }.