{"id":21456418,"url":"https://github.com/driusan/dkim","last_synced_at":"2026-02-22T05:34:20.217Z","repository":{"id":48582632,"uuid":"119297411","full_name":"driusan/dkim","owner":"driusan","description":"Pure Go tools for managing DKIM headers","archived":false,"fork":false,"pushed_at":"2021-07-19T16:02:45.000Z","size":28,"stargazers_count":28,"open_issues_count":2,"forks_count":6,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-15T03:24:46.869Z","etag":null,"topics":["dkim","go","mail","plan9"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/driusan.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}},"created_at":"2018-01-28T21:00:51.000Z","updated_at":"2024-01-18T03:46:42.000Z","dependencies_parsed_at":"2022-08-30T04:41:52.113Z","dependency_job_id":null,"html_url":"https://github.com/driusan/dkim","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/driusan/dkim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driusan%2Fdkim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driusan%2Fdkim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driusan%2Fdkim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driusan%2Fdkim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/driusan","download_url":"https://codeload.github.com/driusan/dkim/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/driusan%2Fdkim/sbom","scorecard":{"id":356334,"data":{"date":"2025-08-11","repo":{"name":"github.com/driusan/dkim","commit":"2665b9291ad43d1503f1891767dfd2c4f95b95c6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/12 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 1 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T09:42:27.906Z","repository_id":48582632,"created_at":"2025-08-18T09:42:27.906Z","updated_at":"2025-08-18T09:42:27.906Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29705536,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T03:17:42.375Z","status":"ssl_error","status_checked_at":"2026-02-22T03:17:31.622Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dkim","go","mail","plan9"],"created_at":"2024-11-23T05:15:39.092Z","updated_at":"2026-02-22T05:34:20.189Z","avatar_url":"https://github.com/driusan.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# driusan's DKIM tools\n\nThis is a collection of pure Go tools I've written to DKIM sign\nmessages and verify them on my 9front mail server.  They should be\nfairly easy to incorporate into any pipeline that can pass messages\nalong stdin and read them from stdout.\n\n## Verifying DKIM Signatures\n\nThe tool `dkimverify` will verify that a message has a valid\nsignature.\n\nIt can either read a message from stdin, or have (optionally many)\nfilenames passed as arguments.  If all messages have valid signatures,\nit will exit with a success status, otherwise it will exit with an\nexit code of the number of messages that failed validation.  For each\none, it will print the reason for the failure to stderr.\n\nThe `-hd` parameter takes a string argument and instead of printing to\nstderr, will print an SMTP header of that name with a value of \"Pass\"\nor \"Fail\" to stdout.  Temporary failures or no DKIM signature present\nin a message will print nothing.  `-hdprefix` or `hdsuffix` can be\nused to add a prefix or suffix to the header value.\n\nThe dkimverify tool can be used without any special configuration.\n\n## Signing DKIM Signatures\n\nSigning is slightly more complicated by necessity.  The tool\n`dkimkeygen` will create 2 files in the directory it's run in:\n`dns.txt` and `private.pem`.  The contents of the dns.txt need to be\nadded to your domain's DNS as a TXT record at\n`selector._domainkey.example.com` so that the DKIM signatures added by\n`dkimsign` can be validated.  (the \"selector\" part can be anything you\nwant, but needs to match what's passed to `dkimsign`) `private.pem` is\nthe corresponding private key.\n\n`dkimsign` reads a message from stdin and writes a signed version of\nthat message to stdout according to the parameters passed.  The\nincoming message can have any line ending, but they'll be converted to\n\"\\r\\n\" line endings on output (unless `-n` is passed, in which case\nthey'll be printed as \"\\n\").  If \"-hd\" is passed to `dkimsign`, the\nheader will be printed to stdout but not the message body.  The `-key`\nparameter is the private key and should be the path to the\n`private.pem` generated by dkimkeygen.  `-s` is the selector and\nshould match the selector part of the domain name.  `-d` is the domain\nname.\n\n### Example (Plan 9)\n\nThe following is an example `/mail/lib/remotemail` that should add\nvalid DKIM Signatures on a Plan 9 server.  Note that since it requires\nthe sender to have access to private.pem it should probably only be\nused in a single-user environment.\n\n```\n#!/bin/rc\nshift\nsender=$1\nshift\naddr=$1\nshift\n\n# The first smtp with -f causes SMTP to add any headers it wants and\n# fully qualify the addresses, printing to stdout instead of sending.\n# dkimsign signs From, Date, Subject, and To headers (and the body)\n# with relaxed encoding (the default).  It prints the signed message\n# to stdout with \\n line endings (\"-n\") and undoes the dot-stuffing\n# added by smtp -f (\"-u\") both for generating the signature and for\n# printing it.  It uses the selector 19700101._domainkey.example.com and\n# signs using the private key at /sys/lib/dkim/private.pem (which\n# should correspond to the selector)\n# The second smtp (without -f) then sends the mail for real.\nexec /bin/upas/smtp -f -h example.com .example.com $addr $sender $* | /bin/dkimsign -h From:Date:Subject:To -u -s 19700101 -n -d example.com -key /sys/lib/dkim/private.pem | /bin/upas/smtp -s -h example.com .example.com $addr $sender $*\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdriusan%2Fdkim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdriusan%2Fdkim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdriusan%2Fdkim/lists"}