{"id":20653023,"url":"https://github.com/3846masa/http-signature","last_synced_at":"2025-03-09T21:24:51.772Z","repository":{"id":37692627,"uuid":"182529692","full_name":"3846masa/http-signature","owner":"3846masa","description":"Create / Verify HTTP Signatures (https://tools.ietf.org/html/draft-cavage-http-signatures-10)","archived":false,"fork":false,"pushed_at":"2023-03-04T03:37:15.000Z","size":1087,"stargazers_count":1,"open_issues_count":12,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-17T10:49:53.542Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3846masa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-21T12:23:43.000Z","updated_at":"2025-01-17T14:32:47.000Z","dependencies_parsed_at":"2024-11-21T08:45:28.144Z","dependency_job_id":null,"html_url":"https://github.com/3846masa/http-signature","commit_stats":{"total_commits":237,"total_committers":4,"mean_commits":59.25,"dds":0.09704641350210974,"last_synced_commit":"34a74161bf3319cca98b8c246a881a465263470c"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3846masa%2Fhttp-signature","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3846masa%2Fhttp-signature/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3846masa%2Fhttp-signature/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3846masa%2Fhttp-signature/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3846masa","download_url":"https://codeload.github.com/3846masa/http-signature/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242753499,"owners_count":20179697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T17:40:39.366Z","updated_at":"2025-03-09T21:24:51.737Z","avatar_url":"https://github.com/3846masa.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [@3846masa/http-signature](https://www.npmjs.com/package/@3846masa/http-signature) \u003c!-- omit in toc --\u003e\n\n[![NPM](https://nodei.co/npm/@3846masa/http-signature.png?mini=true)](https://www.npmjs.com/package/@3846masa/http-signature)\n[![CircleCI](https://flat.badgen.net/circleci/github/3846masa/http-signature)](https://circleci.com/gh/3846masa/http-signature)\n[![Codecov](https://flat.badgen.net/codecov/c/github/3846masa/http-signature)](https://codecov.io/gh/3846masa/http-signature)\n\n\u003e Create / Verify [HTTP Signatures](https://tools.ietf.org/html/draft-cavage-http-signatures-10)\n\n## Table of Contents \u003c!-- omit in toc --\u003e\n\n- [Install](#install)\n- [Usage](#usage)\n  - [Create signature](#create-signature)\n  - [Parse signature](#parse-signature)\n  - [Verify signature](#verify-signature)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Install\n\n```bash\nnpm install --save @3846masa/http-signature\n```\n\n```bash\nyarn add @3846masa/http-signature\n```\n\nTypeScript definitions is included.\n\n## Usage\n\n### Create signature\n\n```ts\nimport { createSignature } from '@3846masa/http-signature';\n\nconst privateKey = `\n-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCFENGw33yGihy92pDjZQhl0C36rPJj+CvfSC8+q28hxA161QF\nNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6Z4UMR7EOcpfdUE9Hf3m/hs+F\nUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJwoYi+1hqp1fIekaxsyQIDAQAB\nAoGBAJR8ZkCUvx5kzv+utdl7T5MnordT1TvoXXJGXK7ZZ+UuvMNUCdN2QPc4sBiA\nQWvLw1cSKt5DsKZ8UETpYPy8pPYnnDEz2dDYiaew9+xEpubyeW2oH4Zx71wqBtOK\nkqwrXa/pzdpiucRRjk6vE6YY7EBBs/g7uanVpGibOVAEsqH1AkEA7DkjVH28WDUg\nf1nqvfn2Kj6CT7nIcE3jGJsZZ7zlZmBmHFDONMLUrXR/Zm3pR5m0tCmBqa5RK95u\n412jt1dPIwJBANJT3v8pnkth48bQo/fKel6uEYyboRtA5/uHuHkZ6FQF7OUkGogc\nmSJluOdc5t6hI1VsLn0QZEjQZMEOWr+wKSMCQQCC4kXJEsHAve77oP6HtG/IiEn7\nkpyUXRNvFsDE0czpJJBvL/aRFUJxuRK91jhjC68sA7NsKMGg5OXb5I5Jj36xAkEA\ngIT7aFOYBFwGgQAQkWNKLvySgKbAZRTeLBacpHMuQdl1DfdntvAyqpAZ0lY0RKmW\nG6aFKaqQfOXKCyWoUiVknQJAXrlgySFci/2ueKlIE1QqIiLSZ8V8OlpFLRnb1pzI\n7U1yQXnTAEFYM560yJlzUpOb1V4cScGd365tiSMvxLOvTA==\n-----END RSA PRIVATE KEY-----\n`.trim();\n\ncreateSignature({\n  privateKey,\n  keyId: 'Test',\n  method: 'POST',\n  pathname: '/foo?param=value\u0026pet=dog',\n  headers: {\n    Host: 'example.com',\n    Date: 'Sun, 05 Jan 2014 21:31:40 GMT',\n    'Content-Type': 'application/json',\n    Digest: 'SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=',\n    'Content-Length': 18,\n  },\n  properties: ['(request-target)', 'host', 'date'],\n  algorithm: 'rsa-sha256',\n});\n\n// keyId=\"Test\",algorithm=\"rsa-sha256\",headers=\"(request-target) host date\",signature=\"qdx+H7PHHDZgy4y/Ahn9Tny9V3GP6YgBPyUXMmoxWtLbHpUnXS2mg2+SbrQDMCJypxBLSPQR2aAjn7ndmw2iicw3HMbe8VfEdKFYRqzic+efkb3nndiv/x1xSHDJWeSWkx3ButlYSuBskLu6kd9Fswtemr3lgdDEmn04swr2Os0=\"\n```\n\n### Parse signature\n\n```ts\nimport { parseSignature } from '@3846masa/http-signature';\n\nconst signatureObj = parseSignature(\n  `keyId=\"Test\",algorithm=\"rsa-sha256\",headers=\"(request-target) host date\",signature=\"qdx+H7PHHDZgy4y/Ahn9Tny9V3GP6YgBPyUXMmoxWtLbHpUnXS2mg2+SbrQDMCJypxBLSPQR2aAjn7ndmw2iicw3HMbe8VfEdKFYRqzic+efkb3nndiv/x1xSHDJWeSWkx3ButlYSuBskLu6kd9Fswtemr3lgdDEmn04swr2Os0=\"`,\n);\n\n/**\n * {\n *   keyId: 'Test',\n *   algorithm: 'rsa-sha256',\n *   headers: '(request-target) host date',\n *   signature: 'qdx+H7PHHDZgy4y/Ahn9Tny9V3GP6YgBPyUXMmoxWtLbHpUnXS2mg2+SbrQDMCJypxBLSPQR2aAjn7ndmw2iicw3HMbe8VfEdKFYRqzic+efkb3nndiv/x1xSHDJWeSWkx3ButlYSuBskLu6kd9Fswtemr3lgdDEmn04swr2Os0='\n * }\n */\n```\n\n### Verify signature\n\n```ts\nimport { verifySignature } from '@3846masa/http-signature';\n\nconst publicKey = `\n-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCFENGw33yGihy92pDjZQhl0C3\n6rPJj+CvfSC8+q28hxA161QFNUd13wuCTUcq0Qd2qsBe/2hFyc2DCJJg0h1L78+6\nZ4UMR7EOcpfdUE9Hf3m/hs+FUR45uBJeDK1HSFHD8bHKD6kv8FPGfJTotc+2xjJw\noYi+1hqp1fIekaxsyQIDAQAB\n-----END PUBLIC KEY-----\n`.trim();\n\ntry {\n  verifySignature({\n    publicKey,\n    signature: {\n      keyId: 'Test',\n      algorithm: 'rsa-sha256',\n      headers: '(request-target) host date',\n      signature:\n        'qdx+H7PHHDZgy4y/Ahn9Tny9V3GP6YgBPyUXMmoxWtLbHpUnXS2mg2+SbrQDMCJypxBLSPQR2aAjn7ndmw2iicw3HMbe8VfEdKFYRqzic+efkb3nndiv/x1xSHDJWeSWkx3ButlYSuBskLu6kd9Fswtemr3lgdDEmn04swr2Os0=',\n    },\n    method: 'POST',\n    pathname: '/foo?param=value\u0026pet=dog',\n    headers: {\n      Host: 'example.com',\n      Date: 'Sun, 05 Jan 2014 21:31:40 GMT',\n      'Content-Type': 'application/json',\n      Digest: 'SHA-256=X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=',\n      'Content-Length': 18,\n    },\n    algorithm: 'rsa-sha256',\n  });\n} catch (err) {\n  console.error(err);\n}\n```\n\n## Contributing\n\n1. [Fork it](http://github.com/3846masa/http-signature/fork)\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Lint codes before pushing (`yarn lint`)\n5. Push to the branch (`git push origin my-new-feature`)\n6. Run tests before creating PR (`yarn test`)\n7. Create new Pull Request\n\nPRs accepted.\n\n## License\n\n[MIT (c) 3846masa](https://github.com/3846masa/http-signature/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3846masa%2Fhttp-signature","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3846masa%2Fhttp-signature","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3846masa%2Fhttp-signature/lists"}