├── .eslintrc ├── .github ├── FUNDING.yml └── workflows │ ├── node-aught.yml │ ├── node-pretest.yml │ ├── node-tens.yml │ ├── rebase.yml │ └── require-allow-edits.yml ├── .gitignore ├── .npmrc ├── CHANGELOG.md ├── LICENSE ├── README.md ├── aesid.json ├── asn1.js ├── certificate.js ├── fixProc.js ├── index.js ├── package.json └── test ├── 1024.priv ├── 1024.pub ├── cert.priv ├── cert.pub ├── dsa.1024.priv ├── dsa.1024.pub ├── dsa.2048.priv ├── dsa.2048.pub ├── ec.pass.priv ├── ec.priv ├── ec.pub ├── index.js ├── node.cert ├── pass.1024.priv ├── pass.1024.pub ├── pass.dsa.1024.priv ├── pass.dsa.1024.pub ├── pass.rsa.1024.priv ├── pass.rsa.1024.pub ├── pass.rsa.2028.priv ├── pass.rsa.2028.pub ├── pass2.dsa.1024.priv ├── pass2.dsa.1024.pub ├── rsa.1024.priv ├── rsa.1024.pub ├── rsa.2028.priv ├── rsa.2028.pub ├── vector.js ├── vector.priv └── vector2.priv /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | 4 | "extends": "@ljharb", 5 | 6 | "rules": { 7 | "camelcase": "off", 8 | "func-style": "off", 9 | "id-length": "off", 10 | "max-lines-per-function": "off", 11 | "multiline-comment-style": "off", 12 | "no-negated-condition": "off", 13 | "no-param-reassign": "warn", 14 | "sort-keys": "off", 15 | }, 16 | 17 | "overrides": [ 18 | { 19 | "files": "./asn1.js", 20 | "rules": { 21 | "no-underscore-dangle": "off", 22 | } 23 | }, 24 | { 25 | "files": [ 26 | "./asn1.js", 27 | "./certificate.js", 28 | ], 29 | "rules": { 30 | "no-invalid-this": "off", 31 | } 32 | }, 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [ljharb] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: npm/parse-asn1 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | -------------------------------------------------------------------------------- /.github/workflows/node-aught.yml: -------------------------------------------------------------------------------- 1 | name: 'Tests: node.js < 10' 2 | 3 | on: [pull_request, push] 4 | 5 | jobs: 6 | tests: 7 | uses: ljharb/actions/.github/workflows/node.yml@main 8 | with: 9 | range: '0.10 - 10' 10 | type: minors 11 | command: npm run tests-only 12 | 13 | node: 14 | name: 'node < 10' 15 | needs: [tests] 16 | runs-on: ubuntu-latest 17 | steps: 18 | - run: 'echo tests completed' 19 | -------------------------------------------------------------------------------- /.github/workflows/node-pretest.yml: -------------------------------------------------------------------------------- 1 | name: 'Tests: pretest/posttest' 2 | 3 | on: [pull_request, push] 4 | 5 | jobs: 6 | tests: 7 | uses: ljharb/actions/.github/workflows/pretest.yml@main 8 | -------------------------------------------------------------------------------- /.github/workflows/node-tens.yml: -------------------------------------------------------------------------------- 1 | name: 'Tests: node.js >= 10' 2 | 3 | on: [pull_request, push] 4 | 5 | jobs: 6 | tests: 7 | uses: ljharb/actions/.github/workflows/node.yml@main 8 | with: 9 | range: '>= 10' 10 | type: minors 11 | command: npm run tests-only 12 | 13 | node: 14 | name: 'node >= 10' 15 | needs: [tests] 16 | runs-on: ubuntu-latest 17 | steps: 18 | - run: 'echo tests completed' 19 | -------------------------------------------------------------------------------- /.github/workflows/rebase.yml: -------------------------------------------------------------------------------- 1 | name: Automatic Rebase 2 | 3 | on: [pull_request_target] 4 | 5 | jobs: 6 | _: 7 | uses: ljharb/actions/.github/workflows/rebase.yml@main 8 | secrets: 9 | token: ${{ secrets.GITHUB_TOKEN }} 10 | -------------------------------------------------------------------------------- /.github/workflows/require-allow-edits.yml: -------------------------------------------------------------------------------- 1 | name: Require “Allow Edits” 2 | 3 | on: [pull_request_target] 4 | 5 | jobs: 6 | _: 7 | name: "Require “Allow Edits”" 8 | 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: ljharb/require-allow-edits@main 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | 3 | node_modules 4 | 5 | # Only apps should have lockfiles 6 | npm-shrinkwrap.json 7 | package-lock.json 8 | yarn.lock 9 | 10 | .npmignore 11 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | allow-same-version=true 3 | message=v%s 4 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [v5.1.7](https://github.com/browserify/parse-asn1/compare/v5.1.6...v5.1.7) - 2024-03-05 9 | 10 | ### Commits 11 | 12 | - [eslint] switch from standard to eslint [`794cf67`](https://github.com/browserify/parse-asn1/commit/794cf67208a69d4cc855f784a299906c6d6ef671) 13 | - [meta] add `auto-changelog` [`8961374`](https://github.com/browserify/parse-asn1/commit/89613740568d94746d45adf8d1af029922ab9d54) 14 | - [Tests] migrate from travis to github actions [`fdbdda5`](https://github.com/browserify/parse-asn1/commit/fdbdda5eeeaec0aeb8a740fa49deb449a47390ab) 15 | - [meta] fix package.json indentation [`60eb8f3`](https://github.com/browserify/parse-asn1/commit/60eb8f3e2bd9e91dca0e9fd5e617864cde35cb35) 16 | - [meta] switch from files to npmignore [`e41c881`](https://github.com/browserify/parse-asn1/commit/e41c881bf4cbf97609a82bfe4bfde4fdfcf54e39) 17 | - [Tests] Buffer.from requires node >= 4 [`0f9ba08`](https://github.com/browserify/parse-asn1/commit/0f9ba08be2b626fc4d8d01dd96916c1dbd6a8fb7) 18 | - [Deps] update `browserify-aes`, `evp_bytestokey`, `pbkdf2`, `safe-buffer` [`b5a64da`](https://github.com/browserify/parse-asn1/commit/b5a64da4651941980c91c04e9a4fae814c654aec) 19 | - Only apps should have lockfiles [`75803fd`](https://github.com/browserify/parse-asn1/commit/75803fda05246c4cf5cd968c5cc87494c03d3cf0) 20 | - [meta] add `safe-publish-latest` [`aba1931`](https://github.com/browserify/parse-asn1/commit/aba1931df788100a7ffaf6054e5b024caf3d9a23) 21 | - [Tests] use `aud` [`2a848f6`](https://github.com/browserify/parse-asn1/commit/2a848f6c55d84896a52dcb3bcb54be637e42886d) 22 | - [meta] add missing `engines.node` [`87e2bd3`](https://github.com/browserify/parse-asn1/commit/87e2bd3f9657ecb4fba7903a0c56305de273c3b6) 23 | - [Dev Deps] update `tape` [`50baf1c`](https://github.com/browserify/parse-asn1/commit/50baf1c6a4af51a3d4eac1d1508cda69f6f5252a) 24 | - [Deps] downgrade `asn1.js` to v4 since v5 drops support for node < 4 [`f230870`](https://github.com/browserify/parse-asn1/commit/f23087045497c93bd0a151e29b1e3f738e898cb8) 25 | - [Deps] pin `hash-base` to ~3.0, due to a breaking change [`f15dc5f`](https://github.com/browserify/parse-asn1/commit/f15dc5f12898fd955ef27d037ba649724f6c5e17) 26 | 27 | ## [v5.1.6](https://github.com/browserify/parse-asn1/compare/v5.1.5...v5.1.6) - 2020-08-11 28 | 29 | ### Merged 30 | 31 | - update asn1 [`#37`](https://github.com/browserify/parse-asn1/pull/37) 32 | - remove 'create-hash' dependency [`#40`](https://github.com/browserify/parse-asn1/pull/40) 33 | 34 | ### Commits 35 | 36 | - fix more deps [`8ebb8a3`](https://github.com/browserify/parse-asn1/commit/8ebb8a3c7aaabd25c90f64cb7304c961ba55cf1d) 37 | 38 | ## [v5.1.5](https://github.com/browserify/parse-asn1/compare/v5.1.4...v5.1.5) - 2019-09-18 39 | 40 | ### Merged 41 | 42 | - Improving published files [`#38`](https://github.com/browserify/parse-asn1/pull/38) 43 | 44 | ## [v5.1.4](https://github.com/browserify/parse-asn1/compare/v5.1.3...v5.1.4) - 2019-02-14 45 | 46 | ### Fixed 47 | 48 | - fixes #35, regex work for pems without linebreaks [`#35`](https://github.com/browserify/parse-asn1/issues/35) 49 | 50 | ## [v5.1.3](https://github.com/browserify/parse-asn1/compare/v5.1.2...v5.1.3) - 2019-01-17 51 | 52 | ### Commits 53 | 54 | - rm const [`635d530`](https://github.com/browserify/parse-asn1/commit/635d530a4e29e07ac89814ef9e2a8de1f7c002ed) 55 | 56 | ## [v5.1.2](https://github.com/browserify/parse-asn1/compare/v5.1.1...v5.1.2) - 2019-01-17 57 | 58 | ### Merged 59 | 60 | - Safe buffer [`#30`](https://github.com/browserify/parse-asn1/pull/30) 61 | - Add curve as parameter to certificate algorithm [`#28`](https://github.com/browserify/parse-asn1/pull/28) 62 | 63 | ### Commits 64 | 65 | - version is optional [`97ca375`](https://github.com/browserify/parse-asn1/commit/97ca3751f2c6b928f26fbc6558823042df7bec5d) 66 | 67 | ## [v5.1.1](https://github.com/browserify/parse-asn1/compare/v5.1.0...v5.1.1) - 2018-04-11 68 | 69 | ### Merged 70 | 71 | - Create LICENSE [`#27`](https://github.com/browserify/parse-asn1/pull/27) 72 | - make fixproc compliant with common newline conventions [`#22`](https://github.com/browserify/parse-asn1/pull/22) 73 | 74 | ### Commits 75 | 76 | - Update README.md [`19789cd`](https://github.com/browserify/parse-asn1/commit/19789cdbd5f529351e2477fae4961d996fbc11a1) 77 | 78 | ## [v5.1.0](https://github.com/browserify/parse-asn1/compare/v5.0.0...v5.1.0) - 2017-03-13 79 | 80 | ### Merged 81 | 82 | - add description [`#20`](https://github.com/browserify/parse-asn1/pull/20) 83 | - Cert parsing [`#6`](https://github.com/browserify/parse-asn1/pull/6) 84 | 85 | ### Commits 86 | 87 | - fix formatting [`febc75d`](https://github.com/browserify/parse-asn1/commit/febc75d6ae3e995ab28d4b1d3e5a040cdd1afb28) 88 | - merge [`5e306be`](https://github.com/browserify/parse-asn1/commit/5e306be93671655c518569868066f53c9b298b62) 89 | - fix style [`6131733`](https://github.com/browserify/parse-asn1/commit/6131733f2cea84ca6394e3e6bfe2040daf7eae66) 90 | - cert parsing [`e571b18`](https://github.com/browserify/parse-asn1/commit/e571b18bf516bcd47c6a5699767ac27398a8e0df) 91 | - update deps [`eab3500`](https://github.com/browserify/parse-asn1/commit/eab3500f62ddec3491e28c47dcfeb1e54459b747) 92 | - iter stuff [`00b030c`](https://github.com/browserify/parse-asn1/commit/00b030c2d304ca3a003591abdd10a6e7ef2ce68d) 93 | - credit [`c94dba3`](https://github.com/browserify/parse-asn1/commit/c94dba391223af0b72687868f88049bb0dfcb276) 94 | 95 | ## [v5.0.0](https://github.com/browserify/parse-asn1/compare/v4.0.0...v5.0.0) - 2015-10-29 96 | 97 | ### Merged 98 | 99 | - bump asn1.js [`#17`](https://github.com/browserify/parse-asn1/pull/17) 100 | 101 | ## [v4.0.0](https://github.com/browserify/parse-asn1/compare/v3.0.2...v4.0.0) - 2015-10-26 102 | 103 | ### Merged 104 | 105 | - bump bn [`#16`](https://github.com/browserify/parse-asn1/pull/16) 106 | 107 | ## [v3.0.2](https://github.com/browserify/parse-asn1/compare/v3.0.1...v3.0.2) - 2015-09-28 108 | 109 | ### Merged 110 | 111 | - pull out evp [`#15`](https://github.com/browserify/parse-asn1/pull/15) 112 | - evp: simplify overall logic [`#12`](https://github.com/browserify/parse-asn1/pull/12) 113 | 114 | ### Fixed 115 | 116 | - adds .travis.yml, resolves #14 [`#14`](https://github.com/browserify/parse-asn1/issues/14) 117 | 118 | ### Commits 119 | 120 | - standard [`10d65d0`](https://github.com/browserify/parse-asn1/commit/10d65d07202941a94ef914d883939d318bbbe33d) 121 | - evp: standard-ish formatting [`be4e43d`](https://github.com/browserify/parse-asn1/commit/be4e43d8ca8a766ef77caf724e7204b3e299d601) 122 | - evp: improve variable names [`080e62b`](https://github.com/browserify/parse-asn1/commit/080e62bdb1d3dde124ff736a7767cfaa6e4d71db) 123 | - evp: simplify md_buf logic [`ed059dd`](https://github.com/browserify/parse-asn1/commit/ed059dd60802651722a3e7f7470bbc323b255c99) 124 | - add badges [`ed3184d`](https://github.com/browserify/parse-asn1/commit/ed3184d7b189e32b3fec3d66de98b0676e10e11b) 125 | - evp: remove unused ii, avoid inline expressions [`8058c1e`](https://github.com/browserify/parse-asn1/commit/8058c1ec4f39cfea4bb9fdfd81b675e063e28d1d) 126 | - adds standard and travis targets [`e663708`](https://github.com/browserify/parse-asn1/commit/e66370856e1e20c4b3aa3089734a418b1a752d5e) 127 | - evp: remove another semicolon [`7e1b6e5`](https://github.com/browserify/parse-asn1/commit/7e1b6e5fdb4781497262aa18939b31b2dbffbadd) 128 | - evp: remove semicolon [`403330f`](https://github.com/browserify/parse-asn1/commit/403330fb5768c3572b2d3f45a4f003cadac541bf) 129 | - Rename readme.md to README.md [`cf240ae`](https://github.com/browserify/parse-asn1/commit/cf240ae3283df6afd5aa5bc8e4e7922e8ce0aed2) 130 | 131 | ## [v3.0.1](https://github.com/browserify/parse-asn1/compare/v3.0.0...v3.0.1) - 2015-05-20 132 | 133 | ### Merged 134 | 135 | - Upgrade deps [`#9`](https://github.com/browserify/parse-asn1/pull/9) 136 | - pbkdf2 [`#5`](https://github.com/browserify/parse-asn1/pull/5) 137 | - fixProc: simplify wrap [`#10`](https://github.com/browserify/parse-asn1/pull/10) 138 | 139 | ### Fixed 140 | 141 | - switch line breaks to \r?\n instead of \n\r? fixes #7 [`#7`](https://github.com/browserify/parse-asn1/issues/7) 142 | 143 | ### Commits 144 | 145 | - deal with iterations not being an integer [`c4aee9e`](https://github.com/browserify/parse-asn1/commit/c4aee9e971dac0b7cf9c125e563957cb4c5f2a05) 146 | - update asn1.js [`92214f6`](https://github.com/browserify/parse-asn1/commit/92214f60a33f761fb97989e29f1d1588968aa621) 147 | - update repo location [`5e7960a`](https://github.com/browserify/parse-asn1/commit/5e7960a19eab30468dbc6442bf0fce89d1d26e75) 148 | - Add coverage directory to .npmignore. [`0d11c15`](https://github.com/browserify/parse-asn1/commit/0d11c15d7b2f1dea6243991e5bd98fe6057a80d7) 149 | - rn .npmignore to .gitignore [`a9abb96`](https://github.com/browserify/parse-asn1/commit/a9abb96008289c241c3372151ac06a8e43a4343e) 150 | 151 | ## [v3.0.0](https://github.com/browserify/parse-asn1/compare/v2.0.0...v3.0.0) - 2015-01-28 152 | 153 | ### Commits 154 | 155 | - add tests, remove dep [`b6ecaa2`](https://github.com/browserify/parse-asn1/commit/b6ecaa2ebca59d3ee9718fcc6515d7215a1bb89a) 156 | - clean up [`dd84475`](https://github.com/browserify/parse-asn1/commit/dd84475f02741ebc08bed3fc02d36e6d0c1dde7e) 157 | - make modularized [`7059346`](https://github.com/browserify/parse-asn1/commit/7059346a4b74e3b732151174c26d7eb547acba47) 158 | 159 | ## [v2.0.0](https://github.com/browserify/parse-asn1/compare/v1.2.1...v2.0.0) - 2015-01-06 160 | 161 | ### Commits 162 | 163 | - Update asn1.js and bn.js to 1.0 [`9ab8411`](https://github.com/browserify/parse-asn1/commit/9ab8411d7fb489f9d5cde08efdd9ec041a11c99c) 164 | 165 | ## [v1.2.1](https://github.com/browserify/parse-asn1/compare/v1.2.0...v1.2.1) - 2015-01-04 166 | 167 | ### Merged 168 | 169 | - Update asn1.js [`#1`](https://github.com/browserify/parse-asn1/pull/1) 170 | 171 | ## [v1.2.0](https://github.com/browserify/parse-asn1/compare/v1.1.0...v1.2.0) - 2014-12-18 172 | 173 | ### Commits 174 | 175 | - varient version of passwords [`e1eef0b`](https://github.com/browserify/parse-asn1/commit/e1eef0b1d5534e7f0f08caf4242e0dda274882d5) 176 | 177 | ## [v1.1.0](https://github.com/browserify/parse-asn1/compare/v1.0.1...v1.1.0) - 2014-12-18 178 | 179 | ### Commits 180 | 181 | - updates for dsa [`f1e82d2`](https://github.com/browserify/parse-asn1/commit/f1e82d2b61723ea17b8cd86eef5cbed3b0e4658c) 182 | 183 | ## v1.0.1 - 2014-12-16 184 | 185 | ### Commits 186 | 187 | - first [`6cfeecb`](https://github.com/browserify/parse-asn1/commit/6cfeecb4cd46c8032833e76360386f9c64d88c19) 188 | - handle strings [`df96666`](https://github.com/browserify/parse-asn1/commit/df9666656c6edf341a2e99549b197334c5fa2fc9) 189 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017, crypto-browserify contributors 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any 4 | purpose with or without fee is hereby granted, provided that the above 5 | copyright notice and this permission notice appear in all copies. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 8 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 9 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 10 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 11 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 12 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 13 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # parse-asn1 2 | 3 | [![TRAVIS](https://secure.travis-ci.org/crypto-browserify/parse-asn1.png)](http://travis-ci.org/crypto-browserify/parse-asn1) 4 | [![NPM](http://img.shields.io/npm/v/parse-asn1.svg)](https://www.npmjs.org/package/parse-asn1) 5 | 6 | [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard) 7 | 8 | utility library for parsing asn1 files for use with browserify-sign. 9 | -------------------------------------------------------------------------------- /aesid.json: -------------------------------------------------------------------------------- 1 | {"2.16.840.1.101.3.4.1.1": "aes-128-ecb", 2 | "2.16.840.1.101.3.4.1.2": "aes-128-cbc", 3 | "2.16.840.1.101.3.4.1.3": "aes-128-ofb", 4 | "2.16.840.1.101.3.4.1.4": "aes-128-cfb", 5 | "2.16.840.1.101.3.4.1.21": "aes-192-ecb", 6 | "2.16.840.1.101.3.4.1.22": "aes-192-cbc", 7 | "2.16.840.1.101.3.4.1.23": "aes-192-ofb", 8 | "2.16.840.1.101.3.4.1.24": "aes-192-cfb", 9 | "2.16.840.1.101.3.4.1.41": "aes-256-ecb", 10 | "2.16.840.1.101.3.4.1.42": "aes-256-cbc", 11 | "2.16.840.1.101.3.4.1.43": "aes-256-ofb", 12 | "2.16.840.1.101.3.4.1.44": "aes-256-cfb" 13 | } -------------------------------------------------------------------------------- /asn1.js: -------------------------------------------------------------------------------- 1 | // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js 2 | // Fedor, you are amazing. 3 | 4 | 'use strict'; 5 | 6 | var asn1 = require('asn1.js'); 7 | 8 | exports.certificate = require('./certificate'); 9 | 10 | var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { 11 | this.seq().obj( 12 | this.key('version')['int'](), 13 | this.key('modulus')['int'](), 14 | this.key('publicExponent')['int'](), 15 | this.key('privateExponent')['int'](), 16 | this.key('prime1')['int'](), 17 | this.key('prime2')['int'](), 18 | this.key('exponent1')['int'](), 19 | this.key('exponent2')['int'](), 20 | this.key('coefficient')['int']() 21 | ); 22 | }); 23 | exports.RSAPrivateKey = RSAPrivateKey; 24 | 25 | var RSAPublicKey = asn1.define('RSAPublicKey', function () { 26 | this.seq().obj( 27 | this.key('modulus')['int'](), 28 | this.key('publicExponent')['int']() 29 | ); 30 | }); 31 | exports.RSAPublicKey = RSAPublicKey; 32 | 33 | var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { 34 | this.seq().obj( 35 | this.key('algorithm').objid(), 36 | this.key('none').null_().optional(), 37 | this.key('curve').objid().optional(), 38 | this.key('params').seq().obj( 39 | this.key('p')['int'](), 40 | this.key('q')['int'](), 41 | this.key('g')['int']() 42 | ).optional() 43 | ); 44 | }); 45 | 46 | var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { 47 | this.seq().obj( 48 | this.key('algorithm').use(AlgorithmIdentifier), 49 | this.key('subjectPublicKey').bitstr() 50 | ); 51 | }); 52 | exports.PublicKey = PublicKey; 53 | 54 | var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { 55 | this.seq().obj( 56 | this.key('version')['int'](), 57 | this.key('algorithm').use(AlgorithmIdentifier), 58 | this.key('subjectPrivateKey').octstr() 59 | ); 60 | }); 61 | exports.PrivateKey = PrivateKeyInfo; 62 | var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { 63 | this.seq().obj( 64 | this.key('algorithm').seq().obj( 65 | this.key('id').objid(), 66 | this.key('decrypt').seq().obj( 67 | this.key('kde').seq().obj( 68 | this.key('id').objid(), 69 | this.key('kdeparams').seq().obj( 70 | this.key('salt').octstr(), 71 | this.key('iters')['int']() 72 | ) 73 | ), 74 | this.key('cipher').seq().obj( 75 | this.key('algo').objid(), 76 | this.key('iv').octstr() 77 | ) 78 | ) 79 | ), 80 | this.key('subjectPrivateKey').octstr() 81 | ); 82 | }); 83 | 84 | exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo; 85 | 86 | var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { 87 | this.seq().obj( 88 | this.key('version')['int'](), 89 | this.key('p')['int'](), 90 | this.key('q')['int'](), 91 | this.key('g')['int'](), 92 | this.key('pub_key')['int'](), 93 | this.key('priv_key')['int']() 94 | ); 95 | }); 96 | exports.DSAPrivateKey = DSAPrivateKey; 97 | 98 | exports.DSAparam = asn1.define('DSAparam', function () { 99 | this['int'](); 100 | }); 101 | 102 | var ECParameters = asn1.define('ECParameters', function () { 103 | this.choice({ 104 | namedCurve: this.objid() 105 | }); 106 | }); 107 | 108 | var ECPrivateKey = asn1.define('ECPrivateKey', function () { 109 | this.seq().obj( 110 | this.key('version')['int'](), 111 | this.key('privateKey').octstr(), 112 | this.key('parameters').optional().explicit(0).use(ECParameters), 113 | this.key('publicKey').optional().explicit(1).bitstr() 114 | ); 115 | }); 116 | exports.ECPrivateKey = ECPrivateKey; 117 | 118 | exports.signature = asn1.define('signature', function () { 119 | this.seq().obj( 120 | this.key('r')['int'](), 121 | this.key('s')['int']() 122 | ); 123 | }); 124 | -------------------------------------------------------------------------------- /certificate.js: -------------------------------------------------------------------------------- 1 | // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js 2 | // thanks to @Rantanen 3 | 4 | 'use strict'; 5 | 6 | var asn = require('asn1.js'); 7 | 8 | var Time = asn.define('Time', function () { 9 | this.choice({ 10 | utcTime: this.utctime(), 11 | generalTime: this.gentime() 12 | }); 13 | }); 14 | 15 | var AttributeTypeValue = asn.define('AttributeTypeValue', function () { 16 | this.seq().obj( 17 | this.key('type').objid(), 18 | this.key('value').any() 19 | ); 20 | }); 21 | 22 | var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { 23 | this.seq().obj( 24 | this.key('algorithm').objid(), 25 | this.key('parameters').optional(), 26 | this.key('curve').objid().optional() 27 | ); 28 | }); 29 | 30 | var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { 31 | this.seq().obj( 32 | this.key('algorithm').use(AlgorithmIdentifier), 33 | this.key('subjectPublicKey').bitstr() 34 | ); 35 | }); 36 | 37 | var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { 38 | this.setof(AttributeTypeValue); 39 | }); 40 | 41 | var RDNSequence = asn.define('RDNSequence', function () { 42 | this.seqof(RelativeDistinguishedName); 43 | }); 44 | 45 | var Name = asn.define('Name', function () { 46 | this.choice({ 47 | rdnSequence: this.use(RDNSequence) 48 | }); 49 | }); 50 | 51 | var Validity = asn.define('Validity', function () { 52 | this.seq().obj( 53 | this.key('notBefore').use(Time), 54 | this.key('notAfter').use(Time) 55 | ); 56 | }); 57 | 58 | var Extension = asn.define('Extension', function () { 59 | this.seq().obj( 60 | this.key('extnID').objid(), 61 | this.key('critical').bool().def(false), 62 | this.key('extnValue').octstr() 63 | ); 64 | }); 65 | 66 | var TBSCertificate = asn.define('TBSCertificate', function () { 67 | this.seq().obj( 68 | this.key('version').explicit(0)['int']().optional(), 69 | this.key('serialNumber')['int'](), 70 | this.key('signature').use(AlgorithmIdentifier), 71 | this.key('issuer').use(Name), 72 | this.key('validity').use(Validity), 73 | this.key('subject').use(Name), 74 | this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), 75 | this.key('issuerUniqueID').implicit(1).bitstr().optional(), 76 | this.key('subjectUniqueID').implicit(2).bitstr().optional(), 77 | this.key('extensions').explicit(3).seqof(Extension).optional() 78 | ); 79 | }); 80 | 81 | var X509Certificate = asn.define('X509Certificate', function () { 82 | this.seq().obj( 83 | this.key('tbsCertificate').use(TBSCertificate), 84 | this.key('signatureAlgorithm').use(AlgorithmIdentifier), 85 | this.key('signatureValue').bitstr() 86 | ); 87 | }); 88 | 89 | module.exports = X509Certificate; 90 | -------------------------------------------------------------------------------- /fixProc.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // adapted from https://github.com/apatil/pemstrip 4 | var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r+/=]+)[\n\r]+/m; 5 | var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m; 6 | var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r+/=]+)-----END \1-----$/m; 7 | var evp = require('evp_bytestokey'); 8 | var ciphers = require('browserify-aes'); 9 | var Buffer = require('safe-buffer').Buffer; 10 | module.exports = function (okey, password) { 11 | var key = okey.toString(); 12 | var match = key.match(findProc); 13 | var decrypted; 14 | if (!match) { 15 | var match2 = key.match(fullRegex); 16 | decrypted = Buffer.from(match2[2].replace(/[\r\n]/g, ''), 'base64'); 17 | } else { 18 | var suite = 'aes' + match[1]; 19 | var iv = Buffer.from(match[2], 'hex'); 20 | var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64'); 21 | var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key; 22 | var out = []; 23 | var cipher = ciphers.createDecipheriv(suite, cipherKey, iv); 24 | out.push(cipher.update(cipherText)); 25 | out.push(cipher['final']()); 26 | decrypted = Buffer.concat(out); 27 | } 28 | var tag = key.match(startRegex)[1]; 29 | return { 30 | tag: tag, 31 | data: decrypted 32 | }; 33 | }; 34 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var asn1 = require('./asn1'); 4 | var aesid = require('./aesid.json'); 5 | var fixProc = require('./fixProc'); 6 | var ciphers = require('browserify-aes'); 7 | var compat = require('pbkdf2'); 8 | var Buffer = require('safe-buffer').Buffer; 9 | 10 | function decrypt(data, password) { 11 | var salt = data.algorithm.decrypt.kde.kdeparams.salt; 12 | var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10); 13 | var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]; 14 | var iv = data.algorithm.decrypt.cipher.iv; 15 | var cipherText = data.subjectPrivateKey; 16 | var keylen = parseInt(algo.split('-')[1], 10) / 8; 17 | var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1'); 18 | var cipher = ciphers.createDecipheriv(algo, key, iv); 19 | var out = []; 20 | out.push(cipher.update(cipherText)); 21 | out.push(cipher['final']()); 22 | return Buffer.concat(out); 23 | } 24 | 25 | function parseKeys(buffer) { 26 | var password; 27 | if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { 28 | password = buffer.passphrase; 29 | buffer = buffer.key; 30 | } 31 | if (typeof buffer === 'string') { 32 | buffer = Buffer.from(buffer); 33 | } 34 | 35 | var stripped = fixProc(buffer, password); 36 | 37 | var type = stripped.tag; 38 | var data = stripped.data; 39 | var subtype, ndata; 40 | switch (type) { 41 | case 'CERTIFICATE': 42 | ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo; 43 | // falls through 44 | case 'PUBLIC KEY': 45 | if (!ndata) { 46 | ndata = asn1.PublicKey.decode(data, 'der'); 47 | } 48 | subtype = ndata.algorithm.algorithm.join('.'); 49 | switch (subtype) { 50 | case '1.2.840.113549.1.1.1': 51 | return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der'); 52 | case '1.2.840.10045.2.1': 53 | ndata.subjectPrivateKey = ndata.subjectPublicKey; 54 | return { 55 | type: 'ec', 56 | data: ndata 57 | }; 58 | case '1.2.840.10040.4.1': 59 | ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der'); 60 | return { 61 | type: 'dsa', 62 | data: ndata.algorithm.params 63 | }; 64 | default: throw new Error('unknown key id ' + subtype); 65 | } 66 | // throw new Error('unknown key type ' + type) 67 | case 'ENCRYPTED PRIVATE KEY': 68 | data = asn1.EncryptedPrivateKey.decode(data, 'der'); 69 | data = decrypt(data, password); 70 | // falls through 71 | case 'PRIVATE KEY': 72 | ndata = asn1.PrivateKey.decode(data, 'der'); 73 | subtype = ndata.algorithm.algorithm.join('.'); 74 | switch (subtype) { 75 | case '1.2.840.113549.1.1.1': 76 | return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der'); 77 | case '1.2.840.10045.2.1': 78 | return { 79 | curve: ndata.algorithm.curve, 80 | privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey 81 | }; 82 | case '1.2.840.10040.4.1': 83 | ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der'); 84 | return { 85 | type: 'dsa', 86 | params: ndata.algorithm.params 87 | }; 88 | default: throw new Error('unknown key id ' + subtype); 89 | } 90 | // throw new Error('unknown key type ' + type) 91 | case 'RSA PUBLIC KEY': 92 | return asn1.RSAPublicKey.decode(data, 'der'); 93 | case 'RSA PRIVATE KEY': 94 | return asn1.RSAPrivateKey.decode(data, 'der'); 95 | case 'DSA PRIVATE KEY': 96 | return { 97 | type: 'dsa', 98 | params: asn1.DSAPrivateKey.decode(data, 'der') 99 | }; 100 | case 'EC PRIVATE KEY': 101 | data = asn1.ECPrivateKey.decode(data, 'der'); 102 | return { 103 | curve: data.parameters.value, 104 | privateKey: data.privateKey 105 | }; 106 | default: throw new Error('unknown key type ' + type); 107 | } 108 | } 109 | parseKeys.signature = asn1.signature; 110 | 111 | module.exports = parseKeys; 112 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "parse-asn1", 3 | "version": "5.1.7", 4 | "description": "utility library for parsing asn1 files for use with browserify-sign.", 5 | "main": "index.js", 6 | "scripts": { 7 | "prepack": "npmignore --auto --commentLines=autogenerated", 8 | "prepublish": "not-in-publish || npm run prepublishOnly", 9 | "prepublishOnly": "safe-publish-latest", 10 | "lint": "eslint --ext=js,mjs .", 11 | "tests-only": "tape 'test/**/*.js'", 12 | "pretest": "npm run lint", 13 | "test": "npm run tests-only", 14 | "posttest": "aud --production", 15 | "version": "auto-changelog && git add CHANGELOG.md", 16 | "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git://github.com/crypto-browserify/parse-asn1.git" 21 | }, 22 | "author": "", 23 | "license": "ISC", 24 | "dependencies": { 25 | "asn1.js": "^4.10.1", 26 | "browserify-aes": "^1.2.0", 27 | "evp_bytestokey": "^1.0.3", 28 | "hash-base": "~3.0", 29 | "pbkdf2": "^3.1.2", 30 | "safe-buffer": "^5.2.1" 31 | }, 32 | "devDependencies": { 33 | "@ljharb/eslint-config": "^21.1.0", 34 | "aud": "^2.0.4", 35 | "auto-changelog": "^2.4.0", 36 | "eslint": "=8.8.0", 37 | "in-publish": "^2.0.1", 38 | "npmignore": "^0.3.1", 39 | "safe-publish-latest": "^2.0.0", 40 | "tape": "^5.7.5" 41 | }, 42 | "engines": { 43 | "node": ">= 0.10" 44 | }, 45 | "auto-changelog": { 46 | "output": "CHANGELOG.md", 47 | "template": "keepachangelog", 48 | "unreleased": false, 49 | "commitLimit": false, 50 | "backfillLimit": false, 51 | "hideCredit": true 52 | }, 53 | "publishConfig": { 54 | "ignore": [ 55 | ".github/workflows", 56 | "test" 57 | ] 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /test/1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKulUTZ8B1qccZ8c 3 | DXRGSY08gW8KvLlcxxxGC4gZHNT3CBUF8n5R4KE30aZyYZ/rtsQZu05juZJxaJ0q 4 | mbe75dlQ5d+Xc9BMXeQg/MpTZw5TAN7OIdGYYpFBe+1PLZ6wEfjkYrMqMUcfq2Lq 5 | hTLdAbvBJnuRcYZLqmBeOQ8FTrKrAgMBAAECgYEAnkHRbEPU3/WISSQrP36iyCb2 6 | S/SBZwKkzmvCrBxDWhPeDswp9c/2JY76rNWfLzy8iXgUG8WUzvHje61Qh3gmBcKe 7 | bUaTGl4Vy8Ha1YBADo5RfRrdm0FE4tvgvu/TkqFqpBBZweu54285hk5zlG7n/D7Y 8 | dnNXUpu5MlNb5x3gW0kCQQDUL//cwcXUxY/evaJP4jSe+ZwEQZo+zXRLiPUulBoV 9 | aw28CVMuxdgwqAo1X1IKefPeUaf7RQu8gCKaRnpGuEuXAkEAzxZTfMmvmCUDIew4 10 | 5Gk6bK265XQWdhcgiq254lpBGOYmDj9yCE7yA+zmASQwMsXTdQOi1hOCEyrXuSJ5 11 | c++EDQJAFh3WrnzoEPByuYXMmET8tSFRWMQ5vpgNqh3haHR5b4gUC2hxaiunCBNL 12 | 1RpVY9AoUiDywGcG/SPh93CnKB3niwJBAKP7AtsifZgVXtiizB4aMThTjVYaSZrz 13 | D0Kg9DuHylpkDChmFu77TGrNUQgAVuYtfhb/bRblVa/F0hJ4eQHT3JUCQBVT68tb 14 | OgRUk0aP9tC3021VN82X6+klowSQN8oBPX8+TfDWSUilp/+j24Hky+Z29Do7yR/R 15 | qutnL92CvBlVLV4= 16 | -----END PRIVATE KEY----- 17 | -------------------------------------------------------------------------------- /test/1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrpVE2fAdanHGfHA10RkmNPIFv 3 | Cry5XMccRguIGRzU9wgVBfJ+UeChN9GmcmGf67bEGbtOY7mScWidKpm3u+XZUOXf 4 | l3PQTF3kIPzKU2cOUwDeziHRmGKRQXvtTy2esBH45GKzKjFHH6ti6oUy3QG7wSZ7 5 | kXGGS6pgXjkPBU6yqwIDAQAB 6 | -----END PUBLIC KEY----- 7 | -------------------------------------------------------------------------------- /test/cert.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpAIBAAKCAQEAt9YImToSbFBMV+/xo6Dlh8+MlZEizQKLE2B3PF9qKeBCg24p 3 | RYff+rhrfj9fA67Z0duGCDjys+IF2BcqY+vlBt6s0mjfD3zAKwLXCKVTv81znWu7 4 | ChwKk6QQMfs4EHaxJShrA4vdhhf6+Z3Grt6WnlDD7SwUHXVfOexeTC1VIS+0fXQf 5 | bfTMQL8A+0GA7u0/c465v5AGMDwts+leNJ9kdgaowJtUu681i0tlJpTceAn1xuKn 6 | AONbw6LTlQns1+30TDwrUgn72dDcf6s3XqGwMV0RjXC50l/mISNNVLiIDCYf57Fh 7 | W9NZcxt0uuJDwU4VaWxQaMAmbaI2U8sxF3FtGQIDAQABAoIBAQCwhTtybjmceaok 8 | 0khTlz5vHxLd1yP0eNm0PG+hr/jPxv/3FcNZeXPPWmAVNKJ2deG/yau0n4IkygZU 9 | jUHt+mfLJewKihqN03rukeaK7b0yMgQvB2/s8CoTxHislY4q+N12UY4YNKf8h3A9 10 | WYubBC7aS7EmPqn982MByn5tZSYWGwjqZ83j5XUPVATqvLZ0/uruRxZSykV0lcE6 11 | 9xXKj5xHFHn21IcFzzBLTdkQjcOo2wnLVfUqf+1izPKHkXkn5LGRFy+EFwzl+99P 12 | vj6YWinqKaS00CazdxMx61btwQ2euUw9+ifGAr1nQvUaDbv7JzXkTSg4VaXVhO/l 13 | igiGqayBAoGBANwbDnWrQSmS9BPNmA9dL3NYyISsFzWSFqS7/KGQ0ZzkPJ5yIcdV 14 | nl1QZYF7+O/JT6mV8fLKDQiIsB0LSET8nRUsty12n3Gr4ysHiRZTAI+IOubbpE/N 15 | Id+Mk7AElxVJ5Ff/3emJzZrJQH+d+oVkRJFz/7d2AupOVPPWKHtzTkCRAoGBANXQ 16 | zDfX6lGYR8ZWXVAXGHJQLgz5NL0cppdpSNS7gcKUR6Zr+450fHxMM/l8aJvkXuCN 17 | arIGEqKDnWNKfFQiWnAU73Rtntv+C0mMOSlBpn8RNG3MtqXY4HL5aAyLygDhziNH 18 | C8A7QvF4Pl8kqeq1wc+1ULA2Jt6yvfXE2w5jMqgJAoGBAKXyVEWNN5TjsdgYYvP6 19 | euMJZiz5HoqKOT48aW1apV8XiUigni0OtVZ/XfhxAq+u5LvkTEWT5p2viLBtKDCz 20 | EK+9ReImFHJ8eMqhZM8LB1owCNCzer+b1lUYROUpoMsxKdLbG3GPLw/rehB9iDr3 21 | 7OaJQZwNgocrRcuNhHoG5lGxAoGAaI94HuL+2rIef3aioVT6BoUBUCTaTpThPvAk 22 | xqt/lFkRBOiPlyWN7vcQ/7OAMKQoZaWihLaFjGXSpMi7LiWyllcWlpg49JoyiOAC 23 | 4BMTydXvDrbqpwX9FRy0blY6Dd5fAU9wBqy0WwOTdNGoKniB9AJWGCYTMhq03KhM 24 | +6c1EYkCgYAv65p32zCWieFzl/H6EVItNzRoQGOLR8uHcfw0+9Kjs5zPLhtzAJwS 25 | 8YF/6s608zW9yCdsN3k5+9tR2UAPLEvQoHgZQkGmNSeMufEVyC10MKM5ytMMcIU5 26 | UrM1pgMwllNyS1sWpJY0or9gEDaHzchN+Q1Ljj23DHDC1uPTkXQqSg== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /test/cert.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDUDCCAjgCCQD1TryolF9FbDANBgkqhkiG9w0BAQsFADBzMQswCQYDVQQGEwJV 3 | UzEOMAwGA1UECAwFVGV4YXMxDzANBgNVBAcMBkRhbGxhczEWMBQGA1UECgwNUHVi 4 | bGlzaGVyIEluYzErMCkGA1UEAwwiUHVibGlzaGVyIElOVEVSTUVESUFSWSBDRVJU 5 | SUZJQ0FURTAeFw0xOTAxMTAyMTAzNDVaFw0yOTAxMDcyMTAzNDVaMGExCzAJBgNV 6 | BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEPMA0GA1UEBwwGRGFsbGFzMRYwFAYDVQQK 7 | DA1QdWJsaXNoZXIgSW5jMRkwFwYDVQQDDBBCb2IgUGhvdG9ncmFwaGVyMIIBIjAN 8 | BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt9YImToSbFBMV+/xo6Dlh8+MlZEi 9 | zQKLE2B3PF9qKeBCg24pRYff+rhrfj9fA67Z0duGCDjys+IF2BcqY+vlBt6s0mjf 10 | D3zAKwLXCKVTv81znWu7ChwKk6QQMfs4EHaxJShrA4vdhhf6+Z3Grt6WnlDD7SwU 11 | HXVfOexeTC1VIS+0fXQfbfTMQL8A+0GA7u0/c465v5AGMDwts+leNJ9kdgaowJtU 12 | u681i0tlJpTceAn1xuKnAONbw6LTlQns1+30TDwrUgn72dDcf6s3XqGwMV0RjXC5 13 | 0l/mISNNVLiIDCYf57FhW9NZcxt0uuJDwU4VaWxQaMAmbaI2U8sxF3FtGQIDAQAB 14 | MA0GCSqGSIb3DQEBCwUAA4IBAQCLXkxQAHK1uSrtNZL3LbYFmDq1EXpe7wNmRmya 15 | 9i5ys+TmGYACGDEGogTp0uGY1qL7pKPB4IWfZsiZ0UEcYju4eRQR/SfK2e8GPT26 16 | IC3nLfoH20E7+TbHZSfUt3g+Oqn4Sg63vYMXNxCPnUq6gUbbzYcv5/O0cT5yqTpL 17 | 9C1y+IIXSEB0t0M7oYOZDpOSB/VN/7lDZFLjXfeOhhsXbfIc1gyx3BMrNT/nnW1J 18 | LbSpB0r1d9VPsZA40CH7E0oiGQCa9Jb7h3n/10ABu5C8PQktbxjAlqZ5jiuYZG11 19 | C5f7bPbe6ao2OGXWKLrVSE+2hYGMcffXy0gutH4ytLS8EiLX 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /test/dsa.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PARAMETERS----- 2 | MIIBHgKBgQDdFg3WQmpOZxObxraIe4rrbUhrBw99fbnz99IvLj60sM/7Uk7eHYvp 3 | UrPaJBIcjPy68BjV4ekDljuPpFoAorsLzyvVSHuNvN6I/bRGm1TCOjDFVe98Oz6k 4 | XmI6pRfIF0TiIPXkel/sWIfBYa1lqdoW82h9FIjhbxVHrKGfvMEc9wIVAOzmJHec 5 | s6yBm+nE3+OmpWFYj0ylAoGAYxO6mFSoIY7PDRyRzKJEnULSzYXd3FoMkPwDCd5I 6 | ch/piIoAUIIQ542TL54GT9wuiCL+0D48qi9GWKasPZABfPQ008WOzmKzD8ncrUTd 7 | a7pzvUvdmwldA4Aa5/5xSXwtpK+DDye7KPlu+oi1BF6uj4TgfeGr1uxouxC2WhBE 8 | qH0= 9 | -----END DSA PARAMETERS----- 10 | -----BEGIN PRIVATE KEY----- 11 | MIIBSwIBADCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1 12 | CMNp0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2Y 13 | V5se3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3Og 14 | ziRcZ1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/Hckvhlh 15 | HQyKZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+T 16 | VJQ3VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUc 17 | rogAqRGESqBVTawjyF/ECX667y/P49MEFgIUSeRVRgAXsLmeWR/V4Rh9Hex+9+s= 18 | -----END PRIVATE KEY----- 19 | -------------------------------------------------------------------------------- /test/dsa.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBtzCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1CMNp 3 | 0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2YV5se 4 | 3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3OgziRc 5 | Z1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/HckvhlhHQyK 6 | ZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+TVJQ3 7 | VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUcrogA 8 | qRGESqBVTawjyF/ECX667y/P49MDgYQAAoGAXYmxO4+52C1gBzh7GgTwNLJl7bLn 9 | gOhKTFlKhT36VjMjeFfdXmBVBVbfUottKZby/gVX1IXT38PStB/dswbF45bGDdoS 10 | zMFjYmHTtLtrU/4hReVtvb5MYmrPDFX58SwcSRRO/cH6WJPvfu4Aq0cJZA9Kb0B9 11 | 5Wo18JxAqvPtTB8= 12 | -----END PUBLIC KEY----- 13 | -------------------------------------------------------------------------------- /test/dsa.2048.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIDVQIBAAKCAQEA0jDs9lLWX//NXYE1kNKw4UiDVMHHEtTF1OzJvBJvUh3/xMlU 3 | ic8mUpIMU5mt7BTjcijyLLl/TeNBcI/xDvWH3PAfCjP1CmNzOMHwU6wKA4Q20m5v 4 | zjauVycd7loRm5h+1XyD2JL1KmQTzhIIRAmRTeXMnr8LAHidYfUKmzCOCCrnctlE 5 | EOh1S6e7BFxQBRrlUxZF0LTjcAz31rrjIH6wKkYR4mnpGuI2vVJ+qHGmEhvq1hAb 6 | DvP0GN0iofxHlIVqOlfXYCZO388ZabfcBOQG57tTofm8aS4pnXCgbok9wEYPgbU5 7 | n6fEvDGOOObQyY109hZZaDJmfygr5mmD0TIXrQIhAMVBhV4liqAN2MrT/+ZUH6hY 8 | +DhTazzSNLIZKQ5gfd+1AoIBADqHGUVQa9pbwyjbzooeWdijUM9W5P7UUj1OjrA0 9 | HIkcx37qHiYOVFqHpbjDs3tbgRBxBX5zBpwuhywC/6OetDiqzDy7zZCV/YMn06d2 10 | ncW2Ctjp3KPl7of39+HgXXePgTdKcfkjH9upJQTko88rA4NWwZbHYeA3Lv7DcA11 11 | XY3+TQHcxMtxf/E6aePjANJBsJsQjYLy3WyUiS87jkgi0Bigjg/cD3Nel4LToCTR 12 | JvQ4m3w3T4W0xL1+8nPjRZ2q0GgmxZzPfwALrwiSYMgGZC/ov43wqOs6WXs0NnpJ 13 | moU4oxutC/uDvTZmJvRj77FINjK0ZA20jmNvWmTIeEm1Xn4CggEABeRpOymQS5IS 14 | X+u9ya7C+P3MPIRGm4dcWPWgPpD1QcclNYLGnhRp7JazNsbbPMjnx1qtF+2qjfy9 15 | JDeWTAR8qfCNVmQHPAhJsJtV0C/V4PUii71FRNPVC3EAYbcBk8deMGoUg99cxSac 16 | 6MCxIIOxuUKWpw8XPlMVpuXc8+lIMTYCPeLGinmT4DQ573t0MS6U3Ck/987xjkH9 17 | sos7zcYn3vnjywDCxXMidC0eUK1rxAAuY7PL4vQiKwXq8kFtWiKAnns/Zm5LTjiZ 18 | NrwlhNlU2wQVvyIcKaGfSRPheb69IbP+9qp5b7Xe7DNWdo48S0jl2KAFeZ91BnhM 19 | TH6WPtMpjQIgOaTTn6xYK0kZvvH3lZXrzkjp4aNlNY65R0JAKKNsx3s= 20 | -----END DSA PRIVATE KEY----- 21 | -------------------------------------------------------------------------------- /test/dsa.2048.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIDRjCCAjkGByqGSM44BAEwggIsAoIBAQDSMOz2UtZf/81dgTWQ0rDhSINUwccS 3 | 1MXU7Mm8Em9SHf/EyVSJzyZSkgxTma3sFONyKPIsuX9N40Fwj/EO9Yfc8B8KM/UK 4 | Y3M4wfBTrAoDhDbSbm/ONq5XJx3uWhGbmH7VfIPYkvUqZBPOEghECZFN5cyevwsA 5 | eJ1h9QqbMI4IKudy2UQQ6HVLp7sEXFAFGuVTFkXQtONwDPfWuuMgfrAqRhHiaeka 6 | 4ja9Un6ocaYSG+rWEBsO8/QY3SKh/EeUhWo6V9dgJk7fzxlpt9wE5Abnu1Oh+bxp 7 | LimdcKBuiT3ARg+BtTmfp8S8MY445tDJjXT2FlloMmZ/KCvmaYPRMhetAiEAxUGF 8 | XiWKoA3YytP/5lQfqFj4OFNrPNI0shkpDmB937UCggEAOocZRVBr2lvDKNvOih5Z 9 | 2KNQz1bk/tRSPU6OsDQciRzHfuoeJg5UWoeluMOze1uBEHEFfnMGnC6HLAL/o560 10 | OKrMPLvNkJX9gyfTp3adxbYK2Onco+Xuh/f34eBdd4+BN0px+SMf26klBOSjzysD 11 | g1bBlsdh4Dcu/sNwDXVdjf5NAdzEy3F/8Tpp4+MA0kGwmxCNgvLdbJSJLzuOSCLQ 12 | GKCOD9wPc16XgtOgJNEm9DibfDdPhbTEvX7yc+NFnarQaCbFnM9/AAuvCJJgyAZk 13 | L+i/jfCo6zpZezQ2ekmahTijG60L+4O9NmYm9GPvsUg2MrRkDbSOY29aZMh4SbVe 14 | fgOCAQUAAoIBAAXkaTspkEuSEl/rvcmuwvj9zDyERpuHXFj1oD6Q9UHHJTWCxp4U 15 | aeyWszbG2zzI58darRftqo38vSQ3lkwEfKnwjVZkBzwISbCbVdAv1eD1Iou9RUTT 16 | 1QtxAGG3AZPHXjBqFIPfXMUmnOjAsSCDsblClqcPFz5TFabl3PPpSDE2Aj3ixop5 17 | k+A0Oe97dDEulNwpP/fO8Y5B/bKLO83GJ97548sAwsVzInQtHlCta8QALmOzy+L0 18 | IisF6vJBbVoigJ57P2ZuS044mTa8JYTZVNsEFb8iHCmhn0kT4Xm+vSGz/vaqeW+1 19 | 3uwzVnaOPEtI5digBXmfdQZ4TEx+lj7TKY0= 20 | -----END PUBLIC KEY----- 21 | -------------------------------------------------------------------------------- /test/ec.pass.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN ENCRYPTED PRIVATE KEY----- 2 | MIHeMEkGCSqGSIb3DQEFDTA8MBsGCSqGSIb3DQEFDDAOBAi9LqZQx4JFXAICCAAw 3 | HQYJYIZIAWUDBAECBBA+js1fG4Rv/yRN7oZvxbgyBIGQ/D4yj86M1x8lMsnAHQ/K 4 | 7/ryb/baDNHqN9LTZanEGBuyxgrTzt08SiL+h91yFGMoaly029K1VgEI8Lxu5Np/ 5 | A+LK7ewh73ABzsbuxYdcXI+rKnrvLN9Tt6veDs4GlqTTsWwq5wF0C+6gaYRBXA74 6 | T1b6NykGh2UNL5U5pHZEYdOVLz+lRJL7gYqlweNHP/S3 7 | -----END ENCRYPTED PRIVATE KEY----- 8 | -------------------------------------------------------------------------------- /test/ec.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN EC PRIVATE KEY----- 2 | MHQCAQEEIDF6Xv8Sv//wGUWD+c780ppGrU0QdZWCAzxAQPQX8r/uoAcGBSuBBAAK 3 | oUQDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQRija4e/qEMikOHJai7geeUreU 4 | r5Xky/Ax7s2dGtegsPNsPgGe5MpQvg== 5 | -----END EC PRIVATE KEY----- 6 | -------------------------------------------------------------------------------- /test/ec.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEIZeowDylls4K/wfBjO18bYo7gGx8nYQR 3 | ija4e/qEMikOHJai7geeUreUr5Xky/Ax7s2dGtegsPNsPgGe5MpQvg== 4 | -----END PUBLIC KEY----- 5 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var test = require('tape'); 4 | var fs = require('fs'); 5 | var path = require('path'); 6 | var parseKey = require('../'); 7 | function loadPath(str) { 8 | return fs.readFileSync(path.join(__dirname, str)); 9 | } 10 | var rsa1024 = { 11 | 'private': loadPath('/rsa.1024.priv'), 12 | 'public': loadPath('/rsa.1024.pub') 13 | }; 14 | var rsa2028 = { 15 | 'private': loadPath('/rsa.2028.priv'), 16 | 'public': loadPath('/rsa.2028.pub') 17 | }; 18 | var nonrsa1024 = { 19 | 'private': loadPath('/1024.priv'), 20 | 'public': loadPath('/1024.pub') 21 | }; 22 | var pass1024 = { 23 | 'private': { 24 | passphrase: 'fooo', 25 | key: loadPath('/pass.1024.priv') 26 | }, 27 | 'public': loadPath('/pass.1024.pub') 28 | }; 29 | var ec = { 30 | 'private': loadPath('/ec.priv'), 31 | 'public': loadPath('/ec.pub') 32 | }; 33 | var ecpass = { 34 | 'private': { 35 | key: loadPath('/ec.pass.priv'), 36 | passphrase: 'bard' 37 | }, 38 | 'public': loadPath('/ec.pub') 39 | }; 40 | var dsa = { 41 | 'private': loadPath('/dsa.1024.priv'), 42 | 'public': loadPath('/dsa.1024.pub') 43 | }; 44 | var dsa2 = { 45 | 'private': loadPath('/dsa.2048.priv'), 46 | 'public': loadPath('/dsa.2048.pub') 47 | }; 48 | var dsapass = { 49 | 'private': { 50 | key: loadPath('/pass.dsa.1024.priv'), 51 | passphrase: 'password' 52 | }, 53 | 'public': loadPath('/pass.dsa.1024.pub') 54 | }; 55 | var dsapass2 = { 56 | 'private': { 57 | key: loadPath('/pass2.dsa.1024.priv'), 58 | passphrase: 'password' 59 | }, 60 | 'public': loadPath('/pass2.dsa.1024.pub') 61 | }; 62 | var rsapass = { 63 | 'private': { 64 | key: loadPath('/pass.rsa.1024.priv'), 65 | passphrase: 'password' 66 | }, 67 | 'public': loadPath('/pass.rsa.1024.pub') 68 | }; 69 | var rsapass2 = { 70 | 'private': { 71 | key: loadPath('/pass.rsa.2028.priv'), 72 | passphrase: 'password' 73 | }, 74 | 'public': loadPath('/pass.rsa.2028.pub') 75 | }; 76 | var cert = { 77 | 'private': loadPath('/rsa.1024.priv'), 78 | 'public': loadPath('/node.cert') 79 | }; 80 | var cert2 = { 81 | 'private': loadPath('/cert.priv'), 82 | 'public': loadPath('/cert.pub') 83 | }; 84 | var i = 0; 85 | function testIt(keys) { 86 | // eslint-disable-next-line no-plusplus 87 | test('key ' + ++i, function (t) { 88 | t.plan(2); 89 | t.ok(parseKey(keys['public']), 'public key'); 90 | t.ok(parseKey(keys['private']), 'private key'); 91 | }); 92 | } 93 | 94 | testIt(dsa); 95 | testIt(dsa2); 96 | testIt(rsa1024); 97 | testIt(ec); 98 | testIt(rsa2028); 99 | testIt(nonrsa1024); 100 | testIt(ecpass); 101 | testIt(dsapass); 102 | testIt(dsapass2); 103 | testIt(rsapass); 104 | testIt(rsapass2); 105 | testIt(pass1024); 106 | testIt(pass1024); 107 | testIt(cert); 108 | testIt(cert2); 109 | -------------------------------------------------------------------------------- /test/node.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDXDCCAsWgAwIBAgIJAKL0UG+mRkSPMA0GCSqGSIb3DQEBBQUAMH0xCzAJBgNV 3 | BAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEGA1UEBxMKUmh5cyBKb25l 4 | czEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVzdCBUTFMgQ2VydGlmaWNh 5 | dGUxEjAQBgNVBAMTCWxvY2FsaG9zdDAeFw0wOTExMTEwOTUyMjJaFw0yOTExMDYw 6 | OTUyMjJaMH0xCzAJBgNVBAYTAlVLMRQwEgYDVQQIEwtBY2tuYWNrIEx0ZDETMBEG 7 | A1UEBxMKUmh5cyBKb25lczEQMA4GA1UEChMHbm9kZS5qczEdMBsGA1UECxMUVGVz 8 | dCBUTFMgQ2VydGlmaWNhdGUxEjAQBgNVBAMTCWxvY2FsaG9zdDCBnzANBgkqhkiG 9 | 9w0BAQEFAAOBjQAwgYkCgYEA8d8Hc6atq78Jt1HLp9agA/wpQfsFvkYUdZ1YsdvO 10 | kL2janjwHQgMMCy/Njal3FUEW0OLPebKZUJ8L44JBXSlVxU4zyiiSOWld8EkTetR 11 | AVT3WKQq3ud+cnxv7g8rGRQp1UHZwmdbZ1wEfAYq8QjYx6m1ciMgRo7DaDQhD29k 12 | d+UCAwEAAaOB4zCB4DAdBgNVHQ4EFgQUL9miTJn+HKNuTmx/oMWlZP9cd4QwgbAG 13 | A1UdIwSBqDCBpYAUL9miTJn+HKNuTmx/oMWlZP9cd4ShgYGkfzB9MQswCQYDVQQG 14 | EwJVSzEUMBIGA1UECBMLQWNrbmFjayBMdGQxEzARBgNVBAcTClJoeXMgSm9uZXMx 15 | EDAOBgNVBAoTB25vZGUuanMxHTAbBgNVBAsTFFRlc3QgVExTIENlcnRpZmljYXRl 16 | MRIwEAYDVQQDEwlsb2NhbGhvc3SCCQCi9FBvpkZEjzAMBgNVHRMEBTADAQH/MA0G 17 | CSqGSIb3DQEBBQUAA4GBADRXXA2xSUK5W1i3oLYWW6NEDVWkTQ9RveplyeS9MOkP 18 | e7yPcpz0+O0ZDDrxR9chAiZ7fmdBBX1Tr+pIuCrG/Ud49SBqeS5aMJGVwiSd7o1n 19 | dhU2Sz3Q60DwJEL1VenQHiVYlWWtqXBThe9ggqRPnCfsCRTP8qifKkjk45zWPcpN 20 | -----END CERTIFICATE----- 21 | -------------------------------------------------------------------------------- /test/pass.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN ENCRYPTED PRIVATE KEY----- 2 | MIICzzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIji3ZZ6JbsA4CAggA 3 | MB0GCWCGSAFlAwQBFgQQC6MKblq8zyX90/KmgotsMQSCAoDghNf+yxPC/KRh7F3O 4 | k0lMgtDkV+wCLDv7aBvUqy8Ry2zqFPIlfLb8XtSW943XEu6KUI13IZPEr8p9h1ve 5 | Iye6L0g6uAgbFxBE2DwBBSI7mYr7lokr4v0k+inMKf4JeRdI9XWgwOILKTGf1vH7 6 | PhvBnqLhOg6BIOuF426qpiyYlmRda74d0Th4o6ZyhyMSzPI1XbWSg719Ew3N/tLe 7 | OHdYl0eFrgNjq+xO4Ev+W7eNIh/XBMQtk9wo+mxeNdldRnX822HxTsL8fSSPs+9T 8 | W5M/2EBTJMSsswSjZyFkq8ehtxovI2u0IBX1IiPulyUZLnSNPDV1eUVClK6rk+q1 9 | kVsfJhUr2qvIjNlQWlbEXQj4VwGtgl0++l8vdpj59MuN2J3Nx5TNMLjA6BYAa/tr 10 | Bu928QoT7ET+SGx5XKCwKb5fwXmDlV5zZC4kZWTaF/d/Icvj5F+fDZuYFg1JOXNZ 11 | +q2oA1qMYaHGX6lF3pbO84ebg1iwQTDM8iIqFeSMGUJTnk/3a7sqfaWQbEQwGb+X 12 | fXnSTwkF+wO2rriPbFvWyzecWu67zDCP0ZWUgGb86sSJCM7xRGShESwCjOrb88F1 13 | 5SZjyIqogrkc3IWiLH9gc5U8d86qoFjJnP6BfwYks1UIyXNGKfZTCqICpMphV+IS 14 | b0N2jprjLTkWR6nxYGSH1bkKMs7x1M0FBLWWLAZqPn9X3pe6JwIBds04O6XjF0un 15 | oxwDjcJdoxVs7PgRiM5d1Tubqu2zmpCCmXNiqi9B0+rV9/jHg9IA5gUfvYdCcEv+ 16 | oAr90I+2+PuBFa9lgdbDV6DtZk4bSYluqamxVeLPg/vrewYfVfDv6jftfY1D0DEy 17 | 69H0 18 | -----END ENCRYPTED PRIVATE KEY----- 19 | -------------------------------------------------------------------------------- /test/pass.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSK/7i5BV0x+gmX16Wrm7kRkCZ 3 | y1QUt6wiM2g+SAZTYR0381VnSMX2cv7CpN3499lZj1rL5S7YTaZZwX3RvU5fz56/ 4 | eDX6ciL/PZsbclN2KdkMWYgmcb9J1zUeoMQ3cjfFUCdQZ/ZvDWa+wY2Zg8os2Bow 5 | AoufHtYHm3eOly/cWwIDAQAB 6 | -----END PUBLIC KEY----- 7 | -------------------------------------------------------------------------------- /test/pass.dsa.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN ENCRYPTED PRIVATE KEY----- 2 | MIIBnzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQI1z4IJORFws4CAggA 3 | MB0GCWCGSAFlAwQBAgQQq7f0CuKCTITfPS5Xax1H4wSCAVDFyIjYVXfBNe+BARqz 4 | Tfo09y4vKkErOb7Sz4bQkAjRLjOXiUjM4eTNtivml8NqVrQTKAghN+ggxj416OD4 5 | oq6Ns7Ncbd4Xm5Ni8wrrWbJxVog6rAa/ioU0sfgRExYy/xE2Q9KkW+VE7SUwanwY 6 | e81Od9qNM5KhZGM1yUSKa0JA6Xqb8dAqBo9rVt8DceumB9OP83xV3fLEimSZfR6p 7 | slA1P/dTvKxwhpguQe4Z3OkzTzGCxyboqeRW1woNHKbxjzzSHcaki9SHQm3xpUW8 8 | hRAJd6OtDnLbkE9MnC+UcI3mjru1xfnR5MU7qG7e9nvOhEDVaDkiK3DbrSf0B0Bi 9 | p1hyX1XsSXDewSEd/mlfMLdD8WecgUtl9ea7JzxY3/6R78yB951I5TmY45mp/v+N 10 | tbxEv29B65UKf0ac7gVw4LNy8JF2ef/L/meEmBoIAE71f+8= 11 | -----END ENCRYPTED PRIVATE KEY----- 12 | -------------------------------------------------------------------------------- /test/pass.dsa.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBtzCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1CMNp 3 | 0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2YV5se 4 | 3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3OgziRc 5 | Z1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/HckvhlhHQyK 6 | ZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+TVJQ3 7 | VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUcrogA 8 | qRGESqBVTawjyF/ECX667y/P49MDgYQAAoGAXYmxO4+52C1gBzh7GgTwNLJl7bLn 9 | gOhKTFlKhT36VjMjeFfdXmBVBVbfUottKZby/gVX1IXT38PStB/dswbF45bGDdoS 10 | zMFjYmHTtLtrU/4hReVtvb5MYmrPDFX58SwcSRRO/cH6WJPvfu4Aq0cJZA9Kb0B9 11 | 5Wo18JxAqvPtTB8= 12 | -----END PUBLIC KEY----- 13 | -------------------------------------------------------------------------------- /test/pass.rsa.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-192-CBC,04D2D7882E0C474E07E542FE997D2A49 4 | 5 | vfB5Gtm34n3SeI6JELjWiGw6O+j+tGR6Wbi3SNeAZkfSA8PTjei6PVHr+dGK5zMd 6 | nTckd0EpxItqxEdtLK6GtBIa9KRd3cEbayHmyyybH2FC4STXJCUFBe2eb7ZKmnCl 7 | RB5FcmAqExif+QOJwHnZw6DTzq+oGSwi9cSoy2qE62FgXkj8uKAYcBLONmsP1YQA 8 | 4zIub4bnEbIghL/swEB/HVS86FyMCsMXrHEOnSuUUBf/UfZFNypI6kVUNXlItnN1 9 | 14eeRsBD37VkL7dAQPMx+Dwm7DbU07QWrVvzgmWlu3KqR0tRNA9e4a5f14XOYxgS 10 | HZ+XVZK8iAd+76OnprlFtGDowDXGM0wUXPYq5j8WpKxNsVs2RV+S6U0gQLoSqNxt 11 | We7UPWZufzEdjTUO8q9KhdGqFmJ53XIYClZf0bp148b+Bk3P+dN5TbmKQEfulScn 12 | rTLTRo34fdTIAJr5BJh0OXGNs9rFlMJ9Nz4FwVTEB1DMerXtt9ICdhud9BktRhvq 13 | axgoz+XA3LrBrlPPcrSCZyIYjZFydGSkzg439OyDEZ6+uRmc0qhWA4j6AgXx6gGR 14 | NvvypoFVKvXqEq/2F+SVyyMGrm4xPmsr/HUBeE9SmuTzNzDfVAM/xerqIoR2szR0 15 | O0hwtOj4fk7//cd1CjFzd0JiF/SqMkHxkdbmIC9qlhshkWlQbvvhbefodYPuGxmj 16 | L1TaPgX36OcrQSodzyWBN5tSmmX1Nmftcz7iwc4AKrqkdnM3sPS3SczsAjMWrjRr 17 | 7iYhdPQSZtxVCTjACU3h7scNAg9AU6l4YZrowR//J6U= 18 | -----END RSA PRIVATE KEY----- 19 | -------------------------------------------------------------------------------- /test/pass.rsa.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIGcMA0GCSqGSIb3DQEBAQUAA4GKADCBhgJ/OwswbFo/uyC8ltGf/yA1A+gV5IGd 3 | nAgPbUSI3GzbHCA+x+TLG/tLvbRw3r1smppY/jkkpiVW1ErSMuN0uixp5gb78Z9r 4 | H1XpWb5WWgp3WaY/9EHMjMdOkQ/9LVZvRvl/M/Fi6owP+q+amJI1BEjECYfbhGL3 5 | rmlVdq4qXc40QwIDAQAB 6 | -----END PUBLIC KEY----- 7 | -------------------------------------------------------------------------------- /test/pass.rsa.2028.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-256-CBC,7A6A055AD675947A657041422F06D439 4 | 5 | HQdjzAKUuqqKhZHmpzzY/monfqFhiHnZ5c24jtR9fM4aQJXf/e1fz6MEhyIz6XON 6 | sb4CnXZstnxUuVWDkHEu6KWQ/dKALgiDUuT+UdMawVoVPGdgyWZp35pQPWi3fT2V 7 | XZn58YkG8bO3Y403eZPyhadOefD1VtuFuK6/f90jjzx6ZDnwveXpYgFV7Jy1/pFd 8 | cLLMf07C+hbk416nX6UVipWe4GH+ADFom5ZCfAaUotM7n8i149dULNF4YYi2wP31 9 | 1YaDH5vf1CqiaieDY7xLzpEixwJz6ZEg3gLXaUvz2MpF8owiGI3eP0g7voWp3xt4 10 | TQx/qDURlaXiaRriWdWtpKyW1MFuJ5+KdNtR1/kXr2BLPB/ZLwyqtynUy8ZYpb4+ 11 | WIRYpUGeb//ZHGhlCH7CRMdABsal4wTwnzi9fW4Ax96ecJ2SlwCuKxwS7iEq2y1/ 12 | FAfGwsE+XufHhme5p6XjKfiHx+zJMIB2NMkrm+wm4PbMTrGVnw5/41/r6XxOB8fe 13 | iKi12Jth4dusc1vYGYfzKop9uEM6CZ6+Chqzb+Zyh/xUiZVlCX/BYnxr7yXUm9aR 14 | PHQgxkn2Act8FgQB3Kgs3jCiCRIJrlsnybeWzQ3YO9TjC4MxygmmwODDBpsOKnEi 15 | kXXS54+cZFjcsva4uJVwhAywRPVUkLzmTkH0tGiwCHjeQNECm+TLahkkEIXrVTb9 16 | c9creNXMgE6jVVz+R43HXsGvTcgMcBLyFRQJe2nVaj/dQ5JbF4uqNnQzRjAbD34K 17 | uTpFaJ/kmlgcmeScRLnwaoYwFlmhSC+bK0dfY1Jr6AQRA6IDP7nIjqWNDCHNBB8r 18 | Qj1v2KWoVQe3xNHaXhkbJPbA2DKlUIqffkBVtMKtt9KuG3Rccf3bVYAW6oid73/D 19 | z7DMAF5G/OpVR8VbGh1WxXuR7zEVDUwpwsp9ek5dqN8BnBz1ppdZNIKqzszneckU 20 | s2l/6mZBmgV1Nfy/cQU6U5s3S1Xc75UDQVLms3CIOpFTRIpecNTdfa31fYy/svy0 21 | M2lWTbCva0dOyuvMUhTgBL4I7Qa2dUMPXHMZatV5ooHYq/BZJA1r84C5cM5r+umE 22 | 2LLv/BlUr7RaQHhaKGn4Qhpzo5yRDE9mEqDpLVkbg8SxMsdf/pEF5/VyUwA9t8RT 23 | fKVsInRd386tDqJSDbSFqKTvLztr/5YCyzZzvC2YB1voko/caOGd2d/G51Ij+bXU 24 | xEN8U4fHDBsHwPUGb31uZUhTXpL37KiOqZmXFoH2usmuvx882XvyGcV0F4tstMaR 25 | KLKzl2PwqzAYGFexLkYKMz0TYIeN6h3b86ETazPPU49nkaEU23Dx21J2Rb3UlH+I 26 | lDQF3wuH1QlYiTnlcVa/Zu4QQg0/iP8ALkZ06mvn9e9mOtnA8gsh4B2oLqc19VLU 27 | bcpv40dV1H3W9Lcx9B8JYUp0c/Oyno1D7Yj3tjGcwMKECmUpHi4kksehVo0/P933 28 | xmFmC6eyWYVdO9upvY/vKSB7b1dMt85iWr3gnMsSfRYc6jsbSxdjOPST46UsIzjx 29 | wa1DS6+Bv5tiaC4uC6X+0tCAZo+UOQMYUbTGRR/7g/c= 30 | -----END RSA PRIVATE KEY----- 31 | -------------------------------------------------------------------------------- /test/pass.rsa.2028.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBHjANBgkqhkiG9w0BAQEFAAOCAQsAMIIBBgKB/gy7mjaWgPeFdVYDZWRCA9BN 3 | iv3pPb0es27+FKY0hszLaOw47ExCtAWpDsH48TXAfyHBYwBLguayfk4LGIupxb+C 4 | GMbRo3xEp0CbfY1Jby26T9vGjRC1foHDDUJG84uaRbyHqaf4i6zt4gVR+xlAEIjk 5 | aFAAK8cOoXAT1CVqGLLljUCchL8PjaHj/yriZ/S7rdwlI3LnABxwwmLrmR/v71Wt 6 | pmO/aNG8N+1po+QwaghTkyQ59E/ZvAuOkFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQ 7 | aEDRbBFBmBqTv5fFGfk2WsAfKf/RG0/VFd+ZeM5251TeTvXH695nlSGauVl9AgMB 8 | AAE= 9 | -----END PUBLIC KEY----- 10 | -------------------------------------------------------------------------------- /test/pass2.dsa.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: AES-128-CBC,DC173C6DFD455EBE462A35D6AB9A603A 4 | 5 | FoC3sxbdUFJTaNtRpooMxaX2lcQRLUz8qcRhzDBn5a1kaMHp2JM3KlHK5aauybT4 6 | ilmlKJ9sSm8pFLAWPKbkczSgZ+X6p/51v4zaEJSebZ98p32kQk87XJQE7aYroxYV 7 | UfM5PSOoKWilj+LZQQEXV10qDoYGrnbSdoNSxYW5V1a1aP+ua0EO7m9MUYkoLxi3 8 | SJ/s2h/5KM3TOz7d7DOZuSoNm+0n6YC4aqQnR3lmEtAXEYLQqLhH2Q3FTKTHwBQw 9 | HgMBAzcXOS1YSw6Ekwh1eZamizrOEC4I6oZEHoUBqRfbsQ8tu77kDq2ovQSyn8Fp 10 | SeE64m3GgZOYdfcDuNZ0ccmm3shBBfTfD9AwR+1thklKO3oaaLEHb6TmnkD79rEz 11 | 9WsiVxoN7vqqWdgoeyl7REOB6WLQp8kYS4FoRG0QB/ZS8Hs/Tf17QPnrQNiMkvP7 12 | sJSHmlaMKXjWXK0VoN94kfZKUXwkzLD1VXuXFCnUkznWU0tahYi06b8/SVXc6EG+ 13 | 0mzylckH7UnjOQfxSFAlZ+e/PiX80tcPakxYbk+f1Nv7L0NOyhrDv18KUbv9mEpV 14 | Ysild1m7/QSF0u1qmjmGNQ== 15 | -----END DSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /test/pass2.dsa.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBtzCCASwGByqGSM44BAEwggEfAoGBAOY0KsTt5EpJ4LtlD3xRS5mDiGE1CMNp 3 | 0S9X0sK8kP8Aps8iYwMLbZYglk18GCNnCk4SjbAnZHSB3kaIv6AKQc2J8W2YV5se 4 | 3VhpKOFst7bqRtkGsl8uJtGlKTiXNclkv2jsKOrsBokSD1USGCECTNeMt3OgziRc 5 | Z1dS+djSOZ2nAhUAzB96SpxlAak+K/QLVJ+lDe5DcY0CgYEAtxX1/HckvhlhHQyK 6 | ZWLQsDfZBILbhc+OLDpOyT6cJS/sJzfFIYZgK5M3rOS4OmzdYfJccQAuGq+TVJQ3 7 | VcYOdbrIANJV8CDrn4jkkejTzJI6fCwAkPWOyxw8kbV1Hsoy6WLfSCHKpBUcrogA 8 | qRGESqBVTawjyF/ECX667y/P49MDgYQAAoGAXYmxO4+52C1gBzh7GgTwNLJl7bLn 9 | gOhKTFlKhT36VjMjeFfdXmBVBVbfUottKZby/gVX1IXT38PStB/dswbF45bGDdoS 10 | zMFjYmHTtLtrU/4hReVtvb5MYmrPDFX58SwcSRRO/cH6WJPvfu4Aq0cJZA9Kb0B9 11 | 5Wo18JxAqvPtTB8= 12 | -----END PUBLIC KEY----- 13 | -------------------------------------------------------------------------------- /test/rsa.1024.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIICVAIBAAJ/OwswbFo/uyC8ltGf/yA1A+gV5IGdnAgPbUSI3GzbHCA+x+TLG/tL 3 | vbRw3r1smppY/jkkpiVW1ErSMuN0uixp5gb78Z9rH1XpWb5WWgp3WaY/9EHMjMdO 4 | kQ/9LVZvRvl/M/Fi6owP+q+amJI1BEjECYfbhGL3rmlVdq4qXc40QwIDAQABAn8I 5 | VZ0BPoAOhyF33KFMHxy8r28fsVgxJUYgM3NqQgdv4fFawCYXjhJz9duU5YJGFJGJ 6 | WUGeHlkyYFlpi4f3m7tY7JawmQUWB0MNSoKHI3cgDX4/tfBN8ni+cO0eSoR5czBY 7 | EsAHBU47p1awNFAHwd+ZEuv9H4RmMn7p279rQTtpAkAH3Nqs2/vrRF2cZUN4fIXf 8 | 4xHsQBByUayGq8a3J0UGaSFWv68zTUKFherr9uZotNp7NJ4jBXiARw0q8docXUG1 9 | AkAHgmOKHoORtAmikqpmFEJZOtsXMaLCIm4EszPo5ciYoLMBcVit09AdiQlt7ZJL 10 | DY02svU1b0agCZ97kDkmHDkXAkACa8M9JELuDs/P/vIGYDkMVatIFfW6bWF02eFG 11 | taWwMqCcSEsWvbw0xqYt34jURpNbCjmCyQVwYfAw/+TLhP9dAkAFwRjdwjw37qpj 12 | ddg1mNiu37b7swFxmkiMOXZRxaNNsfb56A14RpN3zob3QdGUybGodMIKTFbmU/lu 13 | CjqAxafJAkAG2yf6RWbwFIWfMyt7WYCh0VaGBCcgy574AinVieEo3ZZyFfC63+xm 14 | 3uoaNy4iLoJv4GCjqUBz3ZfcVaO/DDWG 15 | -----END RSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /test/rsa.1024.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PUBLIC KEY----- 2 | MIGGAn87CzBsWj+7ILyW0Z//IDUD6BXkgZ2cCA9tRIjcbNscID7H5Msb+0u9tHDe 3 | vWyamlj+OSSmJVbUStIy43S6LGnmBvvxn2sfVelZvlZaCndZpj/0QcyMx06RD/0t 4 | Vm9G+X8z8WLqjA/6r5qYkjUESMQJh9uEYveuaVV2ripdzjRDAgMBAAE= 5 | -----END RSA PUBLIC KEY----- 6 | -------------------------------------------------------------------------------- /test/rsa.2028.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEjwIBAAKB/gy7mjaWgPeFdVYDZWRCA9BNiv3pPb0es27+FKY0hszLaOw47ExC 3 | tAWpDsH48TXAfyHBYwBLguayfk4LGIupxb+CGMbRo3xEp0CbfY1Jby26T9vGjRC1 4 | foHDDUJG84uaRbyHqaf4i6zt4gVR+xlAEIjkaFAAK8cOoXAT1CVqGLLljUCchL8P 5 | jaHj/yriZ/S7rdwlI3LnABxwwmLrmR/v71WtpmO/aNG8N+1po+QwaghTkyQ59E/Z 6 | vAuOkFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQaEDRbBFBmBqTv5fFGfk2WsAfKf/R 7 | G0/VFd+ZeM5251TeTvXH695nlSGauVl9AgMBAAECgf4LrWHY/l54ouThZWvvbrug 8 | pfz6sJX2g9l7yXmWlEWsPECVo/7SUbpYFpt6OZy99zSg+IKbGqWKfdhoKrTwIVtC 9 | L0YZ0NlmdnANSIz0roxQG7ZxkL5+vHSw/PmD9x4Uwf+Cz8hATCmNBv1qc60dkyuW 10 | 4CLqe72qaTiVWRoO1iagQghNcLoo6vSy65ExLaCDTPha7yu2vw4hFZpWiEjW4dxf 11 | rFdLiix52BC86YlAlxME/rLg8IJVvilbyo9aWdXmxOaUTLRv6PkFD1/gVdw8V9Qr 12 | SLN9FlK2kkjiX0dzoibvZw3tMnt3yydAx0X87+sMRVahC1bp3kVPz4Hy0EWX4QJ/ 13 | PM31vGiuITk2NCd51DXt1Ltn2OP5FaJSmCaEjh0XkU4qouYyjXWt8Bu6BTCl2vua 14 | Fg0Uji9C+IkPLmaUMbMIOwaTk8cWqLthSxsLe70J5OkGrgfKUM/w+BHH1Pt/Pjzj 15 | C++l0kiFaOVDVaAV9GpLPLCBoK/PC9Rb/rxMMoCCNwJ/NZuedIny2w3LMii77h/T 16 | zSvergNGhjY6Rnva8lLXJ6dlrkcPAyps3gWwxqj4NR0T+GM0bDUPVLb7M07XV7SX 17 | v7VJGm52JbRGwM1ss+r8XTTNemeGk+WRxG7TgtsMqYGXLfB8Qxk/f5/Mcc00Tl8u 18 | wXFNsfxJxmt6AbsTr3g36wJ/IhOnibz9Ad+nchlBnN3QeW3CKHqzaR18voqvtVm2 19 | kJfHK15prH/sSGmxmiEGgrCJTZxtDbaNCO7/VBjnKudUUIhCAwsLtuq0/zub9vAd 20 | 8G1scfIpv5qaSNzmKoX8bOwArvrS6wP7yKrcTsuWIlHD8rJVI7IEDnQoTp5G8fK1 21 | hwJ/MIh8M5v0r5dUYEv6oIJWGcle6AH1JmsP5WIafgq72Z2288pHcCFHwNY8Dg9J 22 | 76QswVLnUhPTlmm3EOOPGEtam2iAD5r0Afytlb4lbNoQsj2szeXONDXB+6oueajh 23 | VNELUr8HcSP5lgzRZjJW6aFIzj9LDRmQnUAOjGSXVOQtEwJ/MCQZ7N/v4dIKeDRA 24 | 8d8UExZ3+gGHumziztGRJ0tQryZH2PakP5I7V+1l7qEUnJ2c3mF+e1v41Ep9LCvh 25 | bzrPKw9dxh18g4b+7bMpsWPnsraKh6ipxc7aaOaZV0Dxgez4zcZu0P1olO0cN3KM 26 | nxJ0Pds3R8bAhNCDdS2JZaRp5Q== 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /test/rsa.2028.pub: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PUBLIC KEY----- 2 | MIIBBgKB/gy7mjaWgPeFdVYDZWRCA9BNiv3pPb0es27+FKY0hszLaOw47ExCtAWp 3 | DsH48TXAfyHBYwBLguayfk4LGIupxb+CGMbRo3xEp0CbfY1Jby26T9vGjRC1foHD 4 | DUJG84uaRbyHqaf4i6zt4gVR+xlAEIjkaFAAK8cOoXAT1CVqGLLljUCchL8PjaHj 5 | /yriZ/S7rdwlI3LnABxwwmLrmR/v71WtpmO/aNG8N+1po+QwaghTkyQ59E/ZvAuO 6 | kFWHok2q/R6PYAa2jdZ9zim0FqOP+nkQaEDRbBFBmBqTv5fFGfk2WsAfKf/RG0/V 7 | Fd+ZeM5251TeTvXH695nlSGauVl9AgMBAAE= 8 | -----END RSA PUBLIC KEY----- 9 | -------------------------------------------------------------------------------- /test/vector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var bFrom = Buffer.from || function (a, b) { return new Buffer(a, b); }; 4 | 5 | module.exports = { 6 | p: bFrom('86F5CA03DCFEB225063FF830A0C769B9DD9D6153AD91D7CE27F787C43278B447E6533B86B18BED6E8A48B784A14C252C5BE0DBF60B86D6385BD2F12FB763ED8873ABFD3F5BA2E0A8C0A59082EAC056935E529DAF7C610467899C77ADEDFC846C881870B7B19B2B58F9BE0521A17002E3BDD6B86685EE90B3D9A1B02B782B1779', 'hex'), 7 | q: bFrom('996F967F6C8E388D9E28D01E205FBA957A5698B1', 'hex'), 8 | g: bFrom('07B0F92546150B62514BB771E2A0C0CE387F03BDA6C56B505209FF25FD3C133D89BBCD97E904E09114D9A7DEFDEADFC9078EA544D2E401AEECC40BB9FBBF78FD87995A10A1C27CB7789B594BA7EFB5C4326A9FE59A070E136DB77175464ADCA417BE5DCE2F40D10A46A3A3943F26AB7FD9C0398FF8C76EE0A56826A8A88F1DBD', 'hex'), 9 | x: bFrom('411602CB19A6CCC34494D79D98EF1E7ED5AF25F7', 'hex'), 10 | y: bFrom('5DF5E01DED31D0297E274E1691C192FE5868FEF9E19A84776454B100CF16F65392195A38B90523E2542EE61871C0440CB87C322FC4B4D2EC5E1E7EC766E1BE8D4CE935437DC11C3C8FD426338933EBFE739CB3465F4D3668C5E473508253B1E682F65CBDC4FAE93C2EA212390E54905A86E2223170B44EAA7DA5DD9FFCFB7F3B', 'hex') 11 | }; 12 | -------------------------------------------------------------------------------- /test/vector.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIBugIBAAKBgQCG9coD3P6yJQY/+DCgx2m53Z1hU62R184n94fEMni0R+ZTO4ax 3 | i+1uiki3hKFMJSxb4Nv2C4bWOFvS8S+3Y+2Ic6v9P1ui4KjApZCC6sBWk15Sna98 4 | YQRniZx3re38hGyIGHC3sZsrWPm+BSGhcALjvda4ZoXukLPZobAreCsXeQIVAJlv 5 | ln9sjjiNnijQHiBfupV6VpixAoGAB7D5JUYVC2JRS7dx4qDAzjh/A72mxWtQUgn/ 6 | Jf08Ez2Ju82X6QTgkRTZp9796t/JB46lRNLkAa7sxAu5+794/YeZWhChwny3eJtZ 7 | S6fvtcQyap/lmgcOE223cXVGStykF75dzi9A0QpGo6OUPyarf9nAOY/4x27gpWgm 8 | qKiPHb0CgYBd9eAd7THQKX4nThaRwZL+WGj++eGahHdkVLEAzxb2U5IZWji5BSPi 9 | VC7mGHHARAy4fDIvxLTS7F4efsdm4b6NTOk1Q33BHDyP1CYziTPr/nOcs0ZfTTZo 10 | xeRzUIJTseaC9ly9xPrpPC6iEjkOVJBahuIiMXC0Tqp9pd2f/Pt/OwIUQRYCyxmm 11 | zMNElNedmO8eftWvJfc= 12 | -----END DSA PRIVATE KEY----- 13 | -------------------------------------------------------------------------------- /test/vector2.priv: -------------------------------------------------------------------------------- 1 | -----BEGIN DSA PRIVATE KEY----- 2 | MIIDVQIBAAKCAQEAnbb7WVG2a7b+HhQPHSzlUCN0Fh/WU43xZIIYZC8LXEjI96Qa 3 | rfoYcyS4dnT6GCKwDx7PgTaUPXxVdXJk5aGkT/4BLpk24AwdPpMQsBx9F5gF0wWL 4 | Kp9Ltvlxa/5hF8a1s8xNm+NBEErUqArWyU4AX0uZPhTwketRdDvzMFDDjeI1Vn4b 5 | NMPWpcDOqhoPNoITw9GYQ9C0sJ3Ln8ctOcjeQfG/FNS7RWPKKDcWIcrTMktqLTkh 6 | Rb6/rHSIBSNvXKL+krhxzY+cNtMpK1UJyoyqd6Kt/Hv9d92m9xElp0Vv6hU+QzJW 7 | oiYcagbtNpN5fnmV+tWqu8++PtonQeN1QEriWwIhAPLDEZN0znbJNWmQtGU3Shfy 8 | P57TUIm9lp9hxt3pmYwfAoIBAFx/9rBvjxQ/6CiEM0k+R2nE2Yis5b4loOJICWcH 9 | FsYT17DO5pMvj6p8RNLLJFI9pT++T27DWViS0apYxDKKBsRqFWYufqpwOh3s+Luy 10 | 0F2+LrlWwUKjOGYdEEYcDRNUcghQV/NJQwn/pzxhH3izKtu1dAw2HJ81vpCZfbIB 11 | Ti71qmF4L1Kr64vWQyxN0Je8VCOyhdr7YNw2ToFh9KKjWso6ELHE0gPMdqRwozr9 12 | y92SlZhZq9i1bhclJS146sZucbqa4/HdJIcZmHQ5PNTYMhhoAGVHYOHjTAnk0VUX 13 | n57A3ERz+Za9zm7tHKvti28Rb3rZz1Bd8PmY40qydRSw/+cCggEAZnCYxlRCbHjX 14 | +CAerGwgPvAw1DYFAywvH6k35SN9vZSfNKCiVk/hJtyLcVxRQYAs4JecgkZGPEDm 15 | tr2qJRP6YRcocWwuT9U7yVuJ5plJ2WUS6HO5yPjf1JnMMSiCVhreyzH2WOk0wMGX 16 | 8sTZawXLrWc4Hnt2iJHk2jhD0k2UzftRJum4vyHoNY7g4KMO8T/WpmTA3ONzH3+0 17 | mkhFpP2CVGh5cqLTglmcm6xODteZgZMHiRMDJVgTSXZBC4nSwXHRI6w1/ZdyGVl6p9FcGppCjlkZT3XHIevLz65EaWpJmvp04EKZ8TICZgFjjLh6t5GQ1KCYY 18 | xXajuxlYck4mWvq3wIgacdUjCHQ3+prmlHJ6tTifDPTs/GAMW5byrkskz8OTbw= 19 | -----END DSA PRIVATE KEY----- 20 | --------------------------------------------------------------------------------