credify-crypto
Advanced tools
Comparing version 0.4.0 to 0.5.0
import Encryption from "./encryption"; | ||
import Signing from "./signing"; | ||
import * as jwt from "./jwt"; | ||
import * as interfaces from "./interfaces"; | ||
export { Encryption, Signing, interfaces }; | ||
export { Encryption, Signing, jwt, interfaces }; |
@@ -330,5 +330,9 @@ import { Crypto } from '@peculiar/webcrypto'; | ||
Signing.prototype.signStringToBase64 = function (message) { | ||
if (!this._privateKey) | ||
throw new Error("Private key is not set yet."); | ||
return pki.ed25519.sign({ message: message, encoding: "binary", privateKey: this._privateKey }).toString("base64"); | ||
}; | ||
Signing.prototype.verifyString = function (message, signature) { | ||
if (!this._publicKey) | ||
throw new Error("Public key is not set yet."); | ||
return pki.ed25519.verify({ | ||
@@ -383,2 +387,61 @@ message: message, | ||
var decodeTokenComponent = function (base64Url) { | ||
var base64 = base64Url | ||
.replace(/\-/g, "+") | ||
.replace(/_/g, "/"); | ||
return JSON.parse(Buffer.from(base64, 'base64').toString('binary')); | ||
}; | ||
var base64ToBase64UrlEncoded = function (base64) { | ||
return base64 | ||
.replace(/=/g, "") | ||
.replace(/\+/g, "-") | ||
.replace(/\//g, "_"); | ||
}; | ||
var encodeTokenComponent = function (json) { | ||
var base64Encoded = Buffer.from(JSON.stringify(json)).toString("base64"); | ||
return base64ToBase64UrlEncoded(base64Encoded); | ||
}; | ||
var composeMessage = function (header, payload) { | ||
return encodeTokenComponent(header) + "." + encodeTokenComponent(payload); | ||
}; | ||
var parseJwt = function (token) { | ||
var _a = token.split('.'), headerEncoded = _a[0], payloadEncoded = _a[1], signature = _a[2]; | ||
var _b = [headerEncoded, payloadEncoded].map(decodeTokenComponent), header = _b[0], payload = _b[1]; | ||
// @ts-ignore | ||
if (!header["alg"] || !header["typ"]) { | ||
throw new Error("Header format is not correct."); | ||
} | ||
// @ts-ignore | ||
if (!payload["exp"] || !payload["iat"] || !payload["signing_key"]) { | ||
throw new Error("Payload format is not correct."); | ||
} | ||
// @ts-ignore | ||
return { header: header, payload: payload, signature: signature }; | ||
}; | ||
var generateJwt = function (signing) { | ||
var timestamp = Number((new Date().getTime() / 1000).toFixed(0)); | ||
var header = { | ||
alg: "Ed25519", | ||
typ: "JWT", | ||
}; | ||
var payload = { | ||
exp: timestamp + 60 * 60, | ||
iat: timestamp, | ||
signing_key: signing.exportPublicKey(), | ||
}; | ||
var signature = base64ToBase64UrlEncoded(signing.signStringToBase64(composeMessage(header, payload))); | ||
return encodeTokenComponent(header) + "." + encodeTokenComponent(payload) + "." + signature; | ||
}; | ||
var verifyJwt = function (jwt, signing) { | ||
var message = composeMessage(jwt.header, jwt.payload); | ||
return signing.verifyString(message, jwt.signature); | ||
}; | ||
var jwt = /*#__PURE__*/Object.freeze({ | ||
__proto__: null, | ||
parseJwt: parseJwt, | ||
generateJwt: generateJwt, | ||
verifyJwt: verifyJwt | ||
}); | ||
var interfaces = /*#__PURE__*/Object.freeze({ | ||
@@ -388,2 +451,2 @@ __proto__: null | ||
export { Encryption, Signing, interfaces }; | ||
export { Encryption, Signing, interfaces, jwt }; |
@@ -334,5 +334,9 @@ 'use strict'; | ||
Signing.prototype.signStringToBase64 = function (message) { | ||
if (!this._privateKey) | ||
throw new Error("Private key is not set yet."); | ||
return nodeForge.pki.ed25519.sign({ message: message, encoding: "binary", privateKey: this._privateKey }).toString("base64"); | ||
}; | ||
Signing.prototype.verifyString = function (message, signature) { | ||
if (!this._publicKey) | ||
throw new Error("Public key is not set yet."); | ||
return nodeForge.pki.ed25519.verify({ | ||
@@ -387,2 +391,61 @@ message: message, | ||
var decodeTokenComponent = function (base64Url) { | ||
var base64 = base64Url | ||
.replace(/\-/g, "+") | ||
.replace(/_/g, "/"); | ||
return JSON.parse(Buffer.from(base64, 'base64').toString('binary')); | ||
}; | ||
var base64ToBase64UrlEncoded = function (base64) { | ||
return base64 | ||
.replace(/=/g, "") | ||
.replace(/\+/g, "-") | ||
.replace(/\//g, "_"); | ||
}; | ||
var encodeTokenComponent = function (json) { | ||
var base64Encoded = Buffer.from(JSON.stringify(json)).toString("base64"); | ||
return base64ToBase64UrlEncoded(base64Encoded); | ||
}; | ||
var composeMessage = function (header, payload) { | ||
return encodeTokenComponent(header) + "." + encodeTokenComponent(payload); | ||
}; | ||
var parseJwt = function (token) { | ||
var _a = token.split('.'), headerEncoded = _a[0], payloadEncoded = _a[1], signature = _a[2]; | ||
var _b = [headerEncoded, payloadEncoded].map(decodeTokenComponent), header = _b[0], payload = _b[1]; | ||
// @ts-ignore | ||
if (!header["alg"] || !header["typ"]) { | ||
throw new Error("Header format is not correct."); | ||
} | ||
// @ts-ignore | ||
if (!payload["exp"] || !payload["iat"] || !payload["signing_key"]) { | ||
throw new Error("Payload format is not correct."); | ||
} | ||
// @ts-ignore | ||
return { header: header, payload: payload, signature: signature }; | ||
}; | ||
var generateJwt = function (signing) { | ||
var timestamp = Number((new Date().getTime() / 1000).toFixed(0)); | ||
var header = { | ||
alg: "Ed25519", | ||
typ: "JWT", | ||
}; | ||
var payload = { | ||
exp: timestamp + 60 * 60, | ||
iat: timestamp, | ||
signing_key: signing.exportPublicKey(), | ||
}; | ||
var signature = base64ToBase64UrlEncoded(signing.signStringToBase64(composeMessage(header, payload))); | ||
return encodeTokenComponent(header) + "." + encodeTokenComponent(payload) + "." + signature; | ||
}; | ||
var verifyJwt = function (jwt, signing) { | ||
var message = composeMessage(jwt.header, jwt.payload); | ||
return signing.verifyString(message, jwt.signature); | ||
}; | ||
var jwt = /*#__PURE__*/Object.freeze({ | ||
__proto__: null, | ||
parseJwt: parseJwt, | ||
generateJwt: generateJwt, | ||
verifyJwt: verifyJwt | ||
}); | ||
var interfaces = /*#__PURE__*/Object.freeze({ | ||
@@ -395,1 +458,2 @@ __proto__: null | ||
exports.interfaces = interfaces; | ||
exports.jwt = jwt; |
import { JWTType } from "./interfaces"; | ||
import Signing from "./signing"; | ||
export declare const parseJwt: (token: string) => JWTType; | ||
export declare const signJwt: (signing: Signing) => string; | ||
export declare const generateJwt: (signing: Signing) => string; | ||
export declare const verifyJwt: (jwt: JWTType, signing: Signing) => boolean; |
{ | ||
"name": "credify-crypto", | ||
"version": "0.4.0", | ||
"version": "0.5.0", | ||
"description": "Credify cryptographic related helpers in JavaScript", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
46065
946