@alessiofrittoli/crypto-signature
Version:
Lightweight TypeScript Signatures library
2 lines • 3.22 kB
JavaScript
;var c=require('crypto'),Hmac=require('@alessiofrittoli/crypto-key/Hmac'),cryptoAlgorithm=require('@alessiofrittoli/crypto-algorithm'),exception=require('@alessiofrittoli/exception'),coercion=require('@alessiofrittoli/crypto-buffer/coercion'),code=require('@alessiofrittoli/exception/code');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var c__default=/*#__PURE__*/_interopDefault(c);var l=(r=>(r.INVALID_JWKNAME="ERR:INVALIDJWKNAME",r.INVALID_SIGN="ERR:INVALIDSIGN",r.NO_SIGN="ERR:NOSIGN",r.NO_PRIVATEKEY="ERR:NOPRIVATEKEY",r.NO_PUBLICKEY="ERR:NOPUBLICKEY",r))(l||{}),t={Exception:code.ErrorCode,Signature:l};var a=class a{static sign(d,A,s=a.Algorithm){if(!d)throw new exception.Exception("No data to sign has been provided.",{code:t.Exception.EMPTY_VALUE});if(!A)throw new exception.Exception("No Private Key has been provided.",{code:t.Signature.NO_PRIVATEKEY});let f=a.jwkAlgToHash(s),r=coercion.coerceToUint8Array(d);if(!f)throw new exception.Exception("Invalid JWK Algorithm name.",{code:t.Signature.INVALID_JWKNAME});try{if(s.startsWith("HS")){let e=A;return e=e instanceof CryptoKey?c__default.default.KeyObject.from(e):e,Hmac.Hmac.digest(r,e,f)}if(s==="EdDSA"){let e=A;return e=e instanceof CryptoKey?c__default.default.KeyObject.from(e):e,c__default.default.sign(null,r,e)}let o=A;o=o instanceof CryptoKey?c__default.default.KeyObject.from(o):o;let S=c__default.default.createSign(f);return S.write(r),S.end(),S.sign(o)}catch(o){throw new exception.Exception("An error occured while creating the signature.",{code:t.Exception.UNKNOWN,cause:o})}}static isValid(d,A,s,f=a.Algorithm){if(!d)throw new exception.Exception("No signature provided.",{code:t.Signature.NO_SIGN});if(!A)throw new exception.Exception("The signed data is needed for integrity controls.",{code:t.Exception.EMPTY_VALUE});if(!s)throw new exception.Exception("No Public Key has been provided.",{code:t.Signature.NO_PUBLICKEY});let r=a.jwkAlgToHash(f);if(!r)throw new exception.Exception("Invalid JWK Algorithm name.",{code:t.Signature.INVALID_JWKNAME});let o=coercion.coerceToUint8Array(d),S=coercion.coerceToUint8Array(A);try{if(f.startsWith("HS")){let n=s;if(n=n instanceof CryptoKey?c__default.default.KeyObject.from(n):n,!Hmac.Hmac.isValid(Buffer.from(o),S,n,r))throw new exception.Exception("Invalid signature.",{code:t.Signature.INVALID_SIGN});return !0}if(f==="EdDSA"){let n=s;if(n=n instanceof CryptoKey?c__default.default.KeyObject.from(n):n,!c__default.default.verify(null,S,n,o))throw new exception.Exception("Invalid signature.",{code:t.Signature.INVALID_SIGN});return !0}let e=s;e=e instanceof CryptoKey?c__default.default.KeyObject.from(e):e;let g=c__default.default.createVerify(r);if(g.write(S),g.end(),!g.verify(e,o))throw new exception.Exception("Invalid signature.",{code:t.Signature.INVALID_SIGN});return !0}catch(e){throw exception.Exception.isException(e)?e:new exception.Exception("An error occured while verifying the signature.",{code:t.Exception.UNKNOWN,cause:e})}}static jwkAlgToHash(d){return cryptoAlgorithm.Algorithm.by({jwkAlg:d})?.hash}};a.Algorithm="HS256",a.HashDigest="SHA-256";var y=a;exports.Signature=y;//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map