57 lines
889 B
JavaScript
57 lines
889 B
JavaScript
;(function () {
|
|
'use strict';
|
|
var PEM = window.PEM = {};
|
|
var Enc = {};
|
|
|
|
// "A little copying is better than a little dependency" - Rob Pike
|
|
|
|
Enc.bufToBase64 = function(u8) {
|
|
var bin = '';
|
|
// map is not part of u8
|
|
u8.forEach(function(i) {
|
|
bin += String.fromCharCode(i);
|
|
});
|
|
return btoa(bin);
|
|
};
|
|
|
|
Enc.base64ToBuf = function(b64) {
|
|
return Uint8Array.from(
|
|
atob(b64)
|
|
.split('')
|
|
.map(function(ch) {
|
|
return ch.charCodeAt(0);
|
|
})
|
|
);
|
|
};
|
|
|
|
|
|
|
|
PEM.parseBlock = function(str) {
|
|
var der = str
|
|
.split(/\n/)
|
|
.filter(function(line) {
|
|
return !/-----/.test(line);
|
|
})
|
|
.join('');
|
|
return { bytes: Enc.base64ToBuf(der) };
|
|
};
|
|
|
|
|
|
|
|
PEM.packBlock = function(opts) {
|
|
// TODO allow for headers?
|
|
return (
|
|
'-----BEGIN ' +
|
|
opts.type +
|
|
'-----\n' +
|
|
Enc.bufToBase64(opts.bytes)
|
|
.match(/.{1,64}/g)
|
|
.join('\n') +
|
|
'\n' +
|
|
'-----END ' +
|
|
opts.type +
|
|
'-----'
|
|
);
|
|
};
|
|
}());
|