{"id":22364615,"url":"https://github.com/c0mm4nd/dart-elliptic","last_synced_at":"2025-07-30T15:31:50.482Z","repository":{"id":37784305,"uuid":"316263294","full_name":"c0mm4nd/dart-elliptic","owner":"c0mm4nd","description":"Elliptic curves and key pair generations in dart","archived":false,"fork":false,"pushed_at":"2024-09-04T22:47:24.000Z","size":60,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-29T17:49:44.876Z","etag":null,"topics":["cryptography","dart","dart2","ecdsa","elliptic-curves"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/elliptic","language":"Dart","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/c0mm4nd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2020-11-26T15:02:05.000Z","updated_at":"2024-09-04T22:47:27.000Z","dependencies_parsed_at":"2022-08-18T07:55:33.989Z","dependency_job_id":null,"html_url":"https://github.com/c0mm4nd/dart-elliptic","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mm4nd%2Fdart-elliptic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mm4nd%2Fdart-elliptic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mm4nd%2Fdart-elliptic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/c0mm4nd%2Fdart-elliptic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/c0mm4nd","download_url":"https://codeload.github.com/c0mm4nd/dart-elliptic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228155755,"owners_count":17878040,"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":["cryptography","dart","dart2","ecdsa","elliptic-curves"],"created_at":"2024-12-04T17:24:34.867Z","updated_at":"2024-12-04T17:24:35.572Z","avatar_url":"https://github.com/c0mm4nd.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dart-elliptic\n\nIn cryptography, the  Digital Signature Algorithm (ECDSA) offers a variant of the Digital Signature Algorithm (DSA) which uses elliptic curve cryptography.\n\nThis lib mainly defines the `abstract class Curve`, serving *Elliptic Curve* which will be used in other packages like [ecdsa](https://pub.dev/packages/ecdsa), schnorr(WIP) and secp256k1 etc.\n\nYou can also get the key pairs on the curve, but if you need to signiture message, please use the signature util package, like [ecdsa](https://pub.dev/packages/ecdsa). \n\nThis package is pure dart and no 3rd dependency.\n\n## Usage\n\nA simple usage example:\n\n```dart\nimport 'package:elliptic/elliptic.dart';\nimport 'package:elliptic/ecdh.dart';\n// if working with PEM\nimport 'package:pem/pem.dart';\n\nvoid main() {\n  // use elliptic curves \n  var ec = getP256();\n  var priv = ec.generatePrivateKey();\n  var pub = priv.publicKey;\n  print('privateKey: 0x$priv');\n  print('publicKey: 0x$pub');\n\n  // use ecdh\n  var privateAlice = ec.generatePrivateKey();\n  var publicAlice = privateAlice.publicKey;\n  var privateBob = ec.generatePrivateKey();\n  var publicBob = privateBob.publicKey;\n  var secretAlice = computeSecretHex(privateAlice, publicBob);\n  var secretBob = computeSecretHex(privateBob, publicAlice);\n  print('secretAlice: 0x$secretAlice');\n  print('secretBob: 0x$secretBob');\n\n  // working with PEM requires https://pub.dev/packages/pem\n  // Parse PEM encoded private key.\n  var rawPriv = PemCodec(PemLabel.privateKey).decode('''\n    -----BEGIN PRIVATE KEY-----\n    MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVcB/UNPxalR9zDYAjQIf\n    jojUDiQuGnSJrFEEzZPT/92hRANCAASc7UJtgnF/abqWM60T3XNJEzBv5ez9TdwK\n    H0M6xpM2q+53wmsN/eYLdgtjgBd3DBmHtPilCkiFICXyaA8z9LkJ\n    -----END PRIVATE KEY-----\n  ''');\n  // Parse PEM encoded public key.\n  var privateFromPEM = PrivateKey.fromBytes(ec, rawPriv);\n  print('privateAliceFromPEM: 0x$privateFromPEM');\n\n  var keyData = PemCodec(PemLabel.publicKey).decode('''\n    -----BEGIN PUBLIC KEY-----\n    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjtGIk8SxD+OEiBpP2/T\n    JUAF0upwuKGMk6wH8Rwov88VvzJrVm2NCticTk5FUg+UG5r8JArrV4tJPRHQyvqK\n    wF4NiksuvOjv3HyIf4oaOhZjT8hDne1Bfv+cFqZJ61Gk0MjANh/T5q9vxER/7TdU\n    NHKpoRV+NVlKN5bEU/NQ5FQjVXicfswxh6Y6fl2PIFqT2CfjD+FkBPU1iT9qyJYH\n    A38IRvwNtcitFgCeZwdGPoxiPPh1WHY8VxpUVBv/2JsUtrB/rAIbGqZoxAIWvijJ\n    Pe9o1TY3VlOzk9ASZ1AeatvOir+iDVJ5OpKmLnzc46QgGPUsjIyo6Sje9dxpGtoG\n    QQIDAQAB\n    -----END PUBLIC KEY-----\n  ''');\n  var hexPublickKey =\n      keyData.map((e) =\u003e e.toRadixString(16).padLeft(2, '0')).join();\n  var X = BigInt.parse(hexPublickKey.substring(0, 64), radix: 16);\n  var Y = BigInt.parse(hexPublickKey.substring(64), radix: 16);\n  var publicFromPEM = PublicKey(ec, X, Y);\n  print('publicFromPEM: 0x$publicFromPEM');\n}\n```\n\n## Features and bugs\n\nPlease file feature requests and bugs at the [issue tracker][tracker].\n\n[tracker]: https://github.com/C0MM4ND/dart-elliptic/issues\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc0mm4nd%2Fdart-elliptic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fc0mm4nd%2Fdart-elliptic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fc0mm4nd%2Fdart-elliptic/lists"}