From 85208ba9a4ab87e34c2a27801cb6fe7f9116a502 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Sun, 2 Apr 2017 21:13:52 -0700 Subject: [PATCH] feat(hexDigest): added hexDigest method to Integrity objects too --- README.md | 11 ++++++----- index.js | 3 +++ test/integrity.js | 11 ++++++++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 499b090..1fbb358 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Integrity](https://w3c.github.io/webappsec/specs/subresourceintegrity/) hashes. * [`Integrity#concat`](#integrity-concat) * [`Integrity#toString`](#integrity-to-string) * [`Integrity#pickAlgorithm`](#integrity-pick-algorithm) - * [`IntegrityMetadata#hexDigest`](#integrity-metadata-hex-digest) + * [`Integrity#hexDigest`](#integrity-hex-digest) * Integrity Generation * [`fromHex`](#from-hex) * [`fromData`](#from-data) @@ -217,15 +217,16 @@ may intentionally deprioritize algorithms with known vulnerabilities. ssri.parse('sha1-WEakDigEST sha512-yzd8ELD1piyANiWnmdnpCL5F52f10UfUdEkHywVZeqTt0ymgrxR63Qz0GB7TKPoeeZQmWCaz7T1').pickAlgorithm() // sha512 ``` -#### `> IntegrityMetadata#hexDigest() -> String` +#### `> Integrity#hexDigest() -> String` -Called on an *individual* `IntegrityMetadata` object, will convert its `digest` -to a hex representation of the base64 data. +`Integrity` is assumed to be either a single-hash `Integrity` instance, or an +`IntegrityMetadata` instance. Returns its `digest`, converted to a hex +representation of the base64 data. ##### Example ```javascript -ssri.parse('sha1-deadbeef', {single: true}).hexDigest() // '75e69d6de79f' +ssri.parse('sha1-deadbeef').hexDigest() // '75e69d6de79f' ``` #### `> ssri.fromHex(hexDigest, algorithm, [opts]) -> Integrity` diff --git a/index.js b/index.js index 94d3d32..18fb24b 100644 --- a/index.js +++ b/index.js @@ -82,6 +82,9 @@ class Integrity { : stringify(integrity, opts) return parse(`${this.toString(opts)} ${other}`, opts) } + hexDigest () { + return parse(this, {single: true}).hexDigest() + } pickAlgorithm (opts) { const pickAlgorithm = (opts && opts.pickAlgorithm) || getPrioritizedHash return Object.keys(this).reduce((acc, algo) => { diff --git a/test/integrity.js b/test/integrity.js index 4b1914e..b90e4fb 100644 --- a/test/integrity.js +++ b/test/integrity.js @@ -81,10 +81,15 @@ test('pickAlgorithm()', t => { t.done() }) -test('IntegrityMetadata.hexDigest()', t => { - const sri = ssri.parse('sha512-bar', {single: true}) +test('hexDigest()', t => { t.equal( - sri.hexDigest(), + ssri.parse('sha512-foo').hexDigest(), + ( + Buffer.from ? Buffer.from('foo', 'base64') : new Buffer('foo', 'base64') + ).toString('hex'), + 'returned hex version of base64 digest') + t.equal( + ssri.parse('sha512-bar', {single: true}).hexDigest(), ( Buffer.from ? Buffer.from('bar', 'base64') : new Buffer('bar', 'base64') ).toString('hex'),