VanillaJS, Lightweight, Zero-Dependency, PEM (RFC 7468) encoder and decoder.
Go to file
AJ ONeal 72d95531d3 v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
browser v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
dist v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
node v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
tests v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
.gitignore v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
.prettierrc v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
LICENSE Initial commit 2019-10-12 18:25:01 +00:00
README.md v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
build.sh v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
index.js v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
package.json v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
packer.js v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00
parser.js v1.0.0: parses bytes, packs type and bytes 2019-10-12 17:45:32 -06:00

README.md

@root/pem

Lightweight, Zero-Dependency PEM encoder and decoder.

| ~300b gzipped | ~650b minified | ~1k full |

  • VanillaJS
  • Zero-Dependency
  • Universal Support
    • Node.js
    • Browsers

Support

This library supports PEM, which is pretty boring on its own.

Most likely you are also interested in some of the following:

Usage

  • PEM.parseBlock(str)
  • PEM.packBlock(options)

Parsing

var PEM = require('@root/pem/parser');

var block = PEM.parseBlock(
	'-----BEGIN Type-----\nSGVsbG8sIOS4lueVjCE=\n-----END Type-----\n'
);
{
	bytes: `<48 65 6c 6c 6f 2c 20 e4 b8 96 e7 95 8c 21>`;
}

Packing

var PEM = require('@root/pem/packer');

var block = PEM.packBlock({
  type: 'Type',
  // Buffer or Uint8Array or Array
  bytes: [0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0xe4, 0xb8, 0x96, 0xe7, 0x95, 0x8c, 0x21]
);
-----BEGIN Type-----
SGVsbG8sIOS4lueVjCE=
-----END Type-----

Install

Node / Webpack

npm install -g @root/pem

Browsers

<script src="https://unpkg.com/@root/pem/dist/pem.all.js"></script>
<script src="https://unpkg.com/@root/pem/dist/pem.all.min.js"></script>

A PEM Block

A Block represents a PEM encoded structure.

The encoded form is:

-----BEGIN Type-----
Headers
base64-encoded Bytes
-----END Type-----

where Headers is a possibly empty sequence of Key: Value lines.

(credit: https://golang.org/pkg/encoding/pem/)

PEM History

PEM was introduced in 1993 via RFC 1421, but not formally standardized until RFC 7468 in April of 2015.

It has served as the de facto standard for a variety of DER-encoded X509 schemas of ASN.1 data for cryptographic keys and certificates such as:

  • PKCS#10 (Certificate Signing Request [CSR])
  • X509 Certificate (fullchain.pem, site.crt)
  • PKIX (cert.pem, privkey.pem, priv.key)
    • PKCS#1 (RSA Public and Private Keys)
    • PKCS#8 (RSA and ECDSA Keypairs)
  • SEC#1 (ECDSARSA Public and Private Keys)

Legal

MPL-2.0 | Terms of Use | Privacy Policy