You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							89 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							89 lines
						
					
					
						
							2.0 KiB
						
					
					
				// Copyright 2016 Joyent, Inc.
 | 
						|
 | 
						|
var x509 = require('./x509');
 | 
						|
 | 
						|
module.exports = {
 | 
						|
	read: read,
 | 
						|
	verify: x509.verify,
 | 
						|
	sign: x509.sign,
 | 
						|
	write: write
 | 
						|
};
 | 
						|
 | 
						|
var assert = require('assert-plus');
 | 
						|
var asn1 = require('asn1');
 | 
						|
var Buffer = require('safer-buffer').Buffer;
 | 
						|
var algs = require('../algs');
 | 
						|
var utils = require('../utils');
 | 
						|
var Key = require('../key');
 | 
						|
var PrivateKey = require('../private-key');
 | 
						|
var pem = require('./pem');
 | 
						|
var Identity = require('../identity');
 | 
						|
var Signature = require('../signature');
 | 
						|
var Certificate = require('../certificate');
 | 
						|
 | 
						|
function read(buf, options) {
 | 
						|
	if (typeof (buf) !== 'string') {
 | 
						|
		assert.buffer(buf, 'buf');
 | 
						|
		buf = buf.toString('ascii');
 | 
						|
	}
 | 
						|
 | 
						|
	var lines = buf.trim().split(/[\r\n]+/g);
 | 
						|
 | 
						|
	var m;
 | 
						|
	var si = -1;
 | 
						|
	while (!m && si < lines.length) {
 | 
						|
		m = lines[++si].match(/*JSSTYLED*/
 | 
						|
		    /[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);
 | 
						|
	}
 | 
						|
	assert.ok(m, 'invalid PEM header');
 | 
						|
 | 
						|
	var m2;
 | 
						|
	var ei = lines.length;
 | 
						|
	while (!m2 && ei > 0) {
 | 
						|
		m2 = lines[--ei].match(/*JSSTYLED*/
 | 
						|
		    /[-]+[ ]*END CERTIFICATE[ ]*[-]+/);
 | 
						|
	}
 | 
						|
	assert.ok(m2, 'invalid PEM footer');
 | 
						|
 | 
						|
	lines = lines.slice(si, ei + 1);
 | 
						|
 | 
						|
	var headers = {};
 | 
						|
	while (true) {
 | 
						|
		lines = lines.slice(1);
 | 
						|
		m = lines[0].match(/*JSSTYLED*/
 | 
						|
		    /^([A-Za-z0-9-]+): (.+)$/);
 | 
						|
		if (!m)
 | 
						|
			break;
 | 
						|
		headers[m[1].toLowerCase()] = m[2];
 | 
						|
	}
 | 
						|
 | 
						|
	/* Chop off the first and last lines */
 | 
						|
	lines = lines.slice(0, -1).join('');
 | 
						|
	buf = Buffer.from(lines, 'base64');
 | 
						|
 | 
						|
	return (x509.read(buf, options));
 | 
						|
}
 | 
						|
 | 
						|
function write(cert, options) {
 | 
						|
	var dbuf = x509.write(cert, options);
 | 
						|
 | 
						|
	var header = 'CERTIFICATE';
 | 
						|
	var tmp = dbuf.toString('base64');
 | 
						|
	var len = tmp.length + (tmp.length / 64) +
 | 
						|
	    18 + 16 + header.length*2 + 10;
 | 
						|
	var buf = Buffer.alloc(len);
 | 
						|
	var o = 0;
 | 
						|
	o += buf.write('-----BEGIN ' + header + '-----\n', o);
 | 
						|
	for (var i = 0; i < tmp.length; ) {
 | 
						|
		var limit = i + 64;
 | 
						|
		if (limit > tmp.length)
 | 
						|
			limit = tmp.length;
 | 
						|
		o += buf.write(tmp.slice(i, limit), o);
 | 
						|
		buf[o++] = 10;
 | 
						|
		i = limit;
 | 
						|
	}
 | 
						|
	o += buf.write('-----END ' + header + '-----\n', o);
 | 
						|
 | 
						|
	return (buf.slice(0, o));
 | 
						|
}
 |