| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 | /** * Javascript implementation of a basic Public Key Infrastructure, including * support for RSA public and private keys. * * @author Dave Longley * * Copyright (c) 2010-2013 Digital Bazaar, Inc. */var forge = require('./forge');require('./asn1');require('./oids');require('./pbe');require('./pem');require('./pbkdf2');require('./pkcs12');require('./pss');require('./rsa');require('./util');require('./x509');// shortcut for asn.1 APIvar asn1 = forge.asn1;/* Public Key Infrastructure (PKI) implementation. */var pki = module.exports = forge.pki = forge.pki || {};/** * NOTE: THIS METHOD IS DEPRECATED. Use pem.decode() instead. * * Converts PEM-formatted data to DER. * * @param pem the PEM-formatted data. * * @return the DER-formatted data. */pki.pemToDer = function(pem) {  var msg = forge.pem.decode(pem)[0];  if(msg.procType && msg.procType.type === 'ENCRYPTED') {    throw new Error('Could not convert PEM to DER; PEM is encrypted.');  }  return forge.util.createBuffer(msg.body);};/** * Converts an RSA private key from PEM format. * * @param pem the PEM-formatted private key. * * @return the private key. */pki.privateKeyFromPem = function(pem) {  var msg = forge.pem.decode(pem)[0];  if(msg.type !== 'PRIVATE KEY' && msg.type !== 'RSA PRIVATE KEY') {    var error = new Error('Could not convert private key from PEM; PEM ' +      'header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');    error.headerType = msg.type;    throw error;  }  if(msg.procType && msg.procType.type === 'ENCRYPTED') {    throw new Error('Could not convert private key from PEM; PEM is encrypted.');  }  // convert DER to ASN.1 object  var obj = asn1.fromDer(msg.body);  return pki.privateKeyFromAsn1(obj);};/** * Converts an RSA private key to PEM format. * * @param key the private key. * @param maxline the maximum characters per line, defaults to 64. * * @return the PEM-formatted private key. */pki.privateKeyToPem = function(key, maxline) {  // convert to ASN.1, then DER, then PEM-encode  var msg = {    type: 'RSA PRIVATE KEY',    body: asn1.toDer(pki.privateKeyToAsn1(key)).getBytes()  };  return forge.pem.encode(msg, {maxline: maxline});};/** * Converts a PrivateKeyInfo to PEM format. * * @param pki the PrivateKeyInfo. * @param maxline the maximum characters per line, defaults to 64. * * @return the PEM-formatted private key. */pki.privateKeyInfoToPem = function(pki, maxline) {  // convert to DER, then PEM-encode  var msg = {    type: 'PRIVATE KEY',    body: asn1.toDer(pki).getBytes()  };  return forge.pem.encode(msg, {maxline: maxline});};
 |