CoolFace
Datasetpublic

basant307/AI_Governance_Project

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
0likes48downloads
sign-stream.js84 linesDownload Raw Back to lib
1/*global module*/2var Buffer = require('safe-buffer').Buffer;3var DataStream = require('./data-stream');4var jwa = require('jwa');5var Stream = require('stream');6var toString = require('./tostring');7var util = require('util');8 9function base64url(string, encoding) {10  return Buffer11    .from(string, encoding)12    .toString('base64')13    .replace(/=/g, '')14    .replace(/\+/g, '-')15    .replace(/\//g, '_');16}17 18function jwsSecuredInput(header, payload, encoding) {19  encoding = encoding || 'utf8';20  var encodedHeader = base64url(toString(header), 'binary');21  var encodedPayload = base64url(toString(payload), encoding);22  return util.format('%s.%s', encodedHeader, encodedPayload);23}24 25function jwsSign(opts) {26  var header = opts.header;27  var payload = opts.payload;28  var secretOrKey = opts.secret || opts.privateKey;29  var encoding = opts.encoding;30  var algo = jwa(header.alg);31  var securedInput = jwsSecuredInput(header, payload, encoding);32  var signature = algo.sign(securedInput, secretOrKey);33  return util.format('%s.%s', securedInput, signature);34}35 36function SignStream(opts) {37  var secret = opts.secret;38  secret = secret == null ? opts.privateKey : secret;39  secret = secret == null ? opts.key : secret;40  if (/^hs/i.test(opts.header.alg) === true && secret == null) {41    throw new TypeError('secret must be a string or buffer or a KeyObject')42  }43  var secretStream = new DataStream(secret);44  this.readable = true;45  this.header = opts.header;46  this.encoding = opts.encoding;47  this.secret = this.privateKey = this.key = secretStream;48  this.payload = new DataStream(opts.payload);49  this.secret.once('close', function () {50    if (!this.payload.writable && this.readable)51      this.sign();52  }.bind(this));53 54  this.payload.once('close', function () {55    if (!this.secret.writable && this.readable)56      this.sign();57  }.bind(this));58}59util.inherits(SignStream, Stream);60 61SignStream.prototype.sign = function sign() {62  try {63    var signature = jwsSign({64      header: this.header,65      payload: this.payload.buffer,66      secret: this.secret.buffer,67      encoding: this.encoding68    });69    this.emit('done', signature);70    this.emit('data', signature);71    this.emit('end');72    this.readable = false;73    return signature;74  } catch (e) {75    this.readable = false;76    this.emit('error', e);77    this.emit('close');78  }79};80 81SignStream.sign = jwsSign;82 83module.exports = SignStream;84 
basant307/AI_Governance_Project · CoolFace