{"id":19535690,"url":"https://github.com/miyako/4d-plugin-common-crypto","last_synced_at":"2025-04-26T14:36:04.582Z","repository":{"id":42668801,"uuid":"37862502","full_name":"miyako/4d-plugin-common-crypto","owner":"miyako","description":"Collection of common hash algorithms.","archived":false,"fork":false,"pushed_at":"2024-03-10T02:38:23.000Z","size":91247,"stargazers_count":8,"open_issues_count":0,"forks_count":12,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-04T14:11:20.074Z","etag":null,"topics":["4d-plugin"],"latest_commit_sha":null,"homepage":"","language":"C","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/miyako.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}},"created_at":"2015-06-22T15:10:50.000Z","updated_at":"2024-08-27T04:42:11.000Z","dependencies_parsed_at":"2024-03-10T03:41:05.558Z","dependency_job_id":null,"html_url":"https://github.com/miyako/4d-plugin-common-crypto","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-common-crypto","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-common-crypto/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-common-crypto/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miyako%2F4d-plugin-common-crypto/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miyako","download_url":"https://codeload.github.com/miyako/4d-plugin-common-crypto/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251001465,"owners_count":21520949,"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":["4d-plugin"],"created_at":"2024-11-11T02:19:37.876Z","updated_at":"2025-04-26T14:35:59.540Z","avatar_url":"https://github.com/miyako.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"![version](https://img.shields.io/badge/version-17%2B-3E8B93)\n![platform](https://img.shields.io/static/v1?label=platform\u0026message=mac-intel%20|%20mac-arm%20|%20win-64\u0026color=blue)\n[![license](https://img.shields.io/github/license/miyako/4d-plugin-common-crypto)](LICENSE)\n![downloads](https://img.shields.io/github/downloads/miyako/4d-plugin-common-crypto/total)\n\n# 4d-plugin-common-crypto\nCollection of common hash algorithms based on native functions and some help from [OpenSSL](https://www.openssl.org).\n\n### News\n\n- library update ``1.1.1c`` (``1.1.1j`` on Mac)\n\n## Installation Instructions\n1. Extract either the **Common Crypto.DMG** or the **Comon Crypto.zip** archives\n2. Add the **Common Crypto.bundle** to your database's **Plugins** folder.\n\nSee also [discuss.4d.com](https://discuss.4d.com/t/crash-on-using-aes128-and-aes256-in-plugin-commoncrypto/15770/2)\n\n### Syntax\n\n[miyako.github.io](https://miyako.github.io/2019/08/16/4d-plugin-common-crypto.html)\n\n### Examples\n\n* HASH\n\n```4d\n$source:=\"Hello World!\"\n$key:=\"my_secret_key\"\n\nCONVERT FROM TEXT($source;\"utf-8\";$sourceData)\nCONVERT FROM TEXT($key;\"utf-8\";$keyData)\n\nASSERT(MD5 ($sourceData;Crypto BASE64)=\"7Qdih1MuhjZehB6Sv8UNjA==\")\nASSERT(SHA1 ($sourceData;Crypto BASE64)=\"Lve95gjOVATpfV8EL5X4nxwjKHE=\")\nASSERT(SHA256 ($sourceData;Crypto BASE64)=\"f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=\")\nASSERT(SHA384 ($sourceData;Crypto BASE64)=\"v9dsDrvQBv7lg0EFR8GIewKSvnbVgtlsJC0qeScj4/1v0GH51c/RO4+WE1jmrbpK\")\nASSERT(SHA512 ($sourceData;Crypto BASE64)=\"hhhE1nBOhXP+w02WfiC8/vPUJM9IvgTm3AjyvVjHKXQzcQFerYkcw88cnTS0kmS1EHUbH/nlN5N7xGtdb/TsyA==\")\n\nASSERT(MD5 ($sourceData;Crypto HEX)=\"ed076287532e86365e841e92bfc50d8c\")\nASSERT(SHA1 ($sourceData;Crypto HEX)=\"2ef7bde608ce5404e97d5f042f95f89f1c232871\")\nASSERT(SHA256 ($sourceData;Crypto HEX)=\"7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069\")\nASSERT(SHA384 ($sourceData;Crypto HEX)=\"bfd76c0ebbd006fee583410547c1887b0292be76d582d96c242d2a792723e3fd6fd061f9d5cfd13b8f961358e6adba4a\")\nASSERT(SHA512 ($sourceData;Crypto HEX)=\"861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8\")\n\n\nASSERT(HMACMD5 ($keyData;$sourceData;Crypto BASE64)=\"AYH2AOvu2Cbt3Ef/hR9k7A==\")\nASSERT(HMACSHA1 ($keyData;$sourceData;Crypto BASE64)=\"BwpO356r2gx9SYj3UFVvc/BfdVA=\")\nASSERT(HMACSHA256 ($keyData;$sourceData;Crypto BASE64)=\"5z1prOAxmam9lz5nlHgudpxIhksTY8pClCivq7RUytQ=\")\nASSERT(HMACSHA384 ($keyData;$sourceData;Crypto BASE64)=\"UDZdkjSVyMpFJQu9dmeAlKg+LW97o6yq1pfBj3QZJM4YMmgZxkoUVVUzyMDcP3DT\")\nASSERT(HMACSHA512 ($keyData;$sourceData;Crypto BASE64)=\"x38L+mMFPEM+QqGrPMOzx2l7rTlmNePxPdaYllFiLQm+G9K2Bf/9oQcci861HAF4NTNqsPZS8gPEiQ0KoznMlA==\")\n\nASSERT(HMACMD5 ($keyData;$sourceData;Crypto HEX)=\"0181f600ebeed826eddc47ff851f64ec\")\nASSERT(HMACSHA1 ($keyData;$sourceData;Crypto HEX)=\"070a4edf9eabda0c7d4988f750556f73f05f7550\")\nASSERT(HMACSHA256 ($keyData;$sourceData;Crypto HEX)=\"e73d69ace03199a9bd973e6794782e769c48864b1363ca429428afabb454cad4\")\nASSERT(HMACSHA384 ($keyData;$sourceData;Crypto HEX)=\"50365d923495c8ca45250bbd76678094a83e2d6f7ba3acaad697c18f741924ce18326819c64a14555533c8c0dc3f70d3\")\nASSERT(HMACSHA512 ($keyData;$sourceData;Crypto HEX)=\"c77f0bfa63053c433e42a1ab3cc3b3c7697bad396635e3f13dd6989651622d09be1bd2b605fffda1071c8bceb51c017835336ab0f652f203c4890d0aa339cc94\")\n```\n\n* RSA\n\n```4d\n$filePath:=Get 4D folder(Current resources folder)+\"95d6465982187ad13e7c5badb657f80dc3e7f925-privatekey.p12\"\nDOCUMENT TO BLOB($filePath;$p12Data)\n\n  //effectively the same as openssl pkcs12 -in *.p12 -out *.pem -nodes\n$pemText:=PEM From P12 ($p12Data;$pemData;\"notasecret\")\n\nC_BLOB($someDataToSign)\nSET BLOB SIZE($someDataToSign;512)\n\nASSERT(RSASHA256 ($someDataToSign;$pemData;Crypto BASE64)=\"SFoEVXo/EqSagiapclf0m2J/d8wQPSq3So/G0EQeGZlpTnsBLQK1LGh9kqySf4yjmd1qdtrtNvmPkBkhNBHNNS9TfBD3OGipXFFE3aG2TSDoicz7yw5bASXD2k0ystqxWPJVk2TpucRBP2Z8dreZviKNqB+ljkWN/zy1vD1FlI8=\")\n```\n\n* AES\n \n```4d\nCONVERT FROM TEXT(\"4D4D\";\"utf-8\";$password)\nCONVERT FROM TEXT(\"data\"*4;\"utf-8\";$data)\n\n$encrypted:=AES256 ($data;$password;Crypto Encrypt;Crypto AES ECB;Crypto BASE64)\nBASE64 DECODE($encrypted;$data)\n\n$decrypted:=AES256 ($data;$password;Crypto Decrypt;Crypto AES ECB;Crypto BASE64)\nBASE64 DECODE($decrypted;$data)\n$decrypted:=Convert to text($data;\"utf-8\")\n```\n\n* AES with IV\n\n```4d\nCONVERT FROM TEXT(\"data\"*4;\"utf-8\";$data)\n\n  //define key and iv instead of a password\nC_BLOB($key;$iv)\nSET BLOB SIZE($key;32)\nSET BLOB SIZE($iv;16)\n\n$iv{0x0000}:=0x0000\n$iv{0x0001}:=0x0001\n$iv{0x0002}:=0x0002\n$iv{0x0003}:=0x0003\n$iv{0x0004}:=0x0004\n$iv{0x0005}:=0x0005\n$iv{0x0006}:=0x0006\n$iv{0x0007}:=0x0007\n$iv{0x0008}:=0x0008\n$iv{0x0009}:=0x0009\n$iv{0x000A}:=0x000A\n$iv{0x000B}:=0x000B\n$iv{0x000C}:=0x000C\n$iv{0x000D}:=0x000D\n$iv{0x000E}:=0x000E\n$iv{0x000F}:=0x000F\n\n$key{0x0000}:=0x002B\n$key{0x0001}:=0x007E\n$key{0x0002}:=0x0015\n$key{0x0003}:=0x0016\n$key{0x0004}:=0x0028\n$key{0x0005}:=0x00AE\n$key{0x0006}:=0x00D2\n$key{0x0007}:=0x00A6\n$key{0x0008}:=0x00AB\n$key{0x0009}:=0x00F7\n$key{0x000A}:=0x0015\n$key{0x000B}:=0x0088\n$key{0x000C}:=0x0009\n$key{0x000D}:=0x00CF\n$key{0x000E}:=0x004F\n$key{0x000F}:=0x003C\n\n$encrypted:=AES256 ($data;\"\";Crypto Encrypt;Crypto AES CTR;Crypto BASE64;Crypto AES No padding;$key;$iv)\nBASE64 DECODE($encrypted;$data)\n\n$decrypted:=AES256 ($data;\"\";Crypto Decrypt;Crypto AES CTR;Crypto BASE64;Crypto AES No padding;$key;$iv)\nBASE64 DECODE($decrypted;$data)\n$decrypted:=Convert to text($data;\"utf-8\")\n\nASSERT($decrypted=(\"data\"*4))\n```\n\n* RIPEMD160\n\n```4d\n$source:=\"Hello World!\"\n$key:=\"my_secret_key\"\n\nCONVERT FROM TEXT($source;\"utf-8\";$sourceData)\n\nASSERT(RIPEMD160 ($sourceData;Crypto BASE64)=\"hHbuRjG5swrCdUsO4MR+Fh0/ckw=\")\n```\n\n* Verify\n\n```4d\nCONVERT FROM TEXT(\"abcde\";\"utf-8\";$data)\n\nDOCUMENT TO BLOB(System folder(Desktop)+\"prvkey.pem\";$prvKey)\n$data64:=RSASHA1 ($data;$prvKey;Crypto BASE64)\n\nDOCUMENT TO BLOB(System folder(Desktop)+\"pubkey.pem\";$pubKey)\n$OK:=RSAVERIFYSHA1 ($data;$pubKey;$data64;Crypto BASE64)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyako%2F4d-plugin-common-crypto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiyako%2F4d-plugin-common-crypto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiyako%2F4d-plugin-common-crypto/lists"}