VanillaJS, Lightweight, Zero-Dependency, PEM (RFC 7468) encoder and decoder.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
AJ ONeal a1a0f29c9b v1.0.4: fix a few typos il y a 5 ans
browser v1.0.0: parses bytes, packs type and bytes il y a 5 ans
dist v1.0.0: parses bytes, packs type and bytes il y a 5 ans
node v1.0.0: parses bytes, packs type and bytes il y a 5 ans
tests v1.0.0: parses bytes, packs type and bytes il y a 5 ans
.gitignore v1.0.0: parses bytes, packs type and bytes il y a 5 ans
.prettierrc v1.0.0: parses bytes, packs type and bytes il y a 5 ans
LICENSE Initial commit il y a 5 ans
README.md v1.0.4: fix a few typos il y a 5 ans
build.sh v1.0.0: parses bytes, packs type and bytes il y a 5 ans
index.js v1.0.0: parses bytes, packs type and bytes il y a 5 ans
package.json v1.0.4: fix a few typos il y a 5 ans
packer.js v1.0.0: parses bytes, packs type and bytes il y a 5 ans
parser.js v1.0.0: parses bytes, packs type and bytes il y a 5 ans

README.md

@root/pem

Built by The Root Company for Greenlock and ACME.js

Lightweight, Zero-Dependency PEM encoder and decoder.

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

  • Zero Dependencies
  • Universal Support
    • Node.js
    • Browsers
  • VanillaJS

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

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

Want to contribute? Need commercial support?

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

This works equally well in Browsers and Node.js, but has slightly different code.

Node (and Webpack)

npm install --save @root/pem
var PEM = require('@root/pem');
// just the packer
var PEM = require('@root/pem/packer');
// just the parser
var PEM = require('@root/pem/parser');

Browsers (Vanilla JS)

<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)

Contributions

Did this project save you some time? Maybe make your day? Even save the day?

Please say "thanks" via Paypal or Patreon:

Where does your contribution go?

Root is a collection of experts who trust each other and enjoy working together on deep-tech, Indie Web projects.

Our goal is to operate as a sustainable community.

Your contributions - both in code and especially monetarily - help to not just this project, but also our broader work of projects that fuel the Indie Web.

Also, we chat on Keybase in #rootprojects

Commercial Support

Do you need...

  • more features?
  • bugfixes, on your timeline?
  • custom code, built by experts?
  • commercial support and licensing?

Contact aj@therootcompany.com for support options.

Legal

Copyright AJ ONeal, Root 2018-2019

MPL-2.0 | Terms of Use | Privacy Policy