{"id":21657808,"url":"https://github.com/signalapp/curve25519-java","last_synced_at":"2025-12-15T19:24:28.354Z","repository":{"id":25412469,"uuid":"28841552","full_name":"signalapp/curve25519-java","owner":"signalapp","description":"Pure Java and JNI backed Curve25519 implementation.","archived":true,"fork":false,"pushed_at":"2022-04-29T21:12:41.000Z","size":2157,"stargazers_count":229,"open_issues_count":17,"forks_count":91,"subscribers_count":18,"default_branch":"main","last_synced_at":"2024-06-26T00:22:51.982Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/signalapp.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":"2015-01-06T01:51:19.000Z","updated_at":"2024-06-12T09:29:14.000Z","dependencies_parsed_at":"2022-08-24T05:40:17.281Z","dependency_job_id":null,"html_url":"https://github.com/signalapp/curve25519-java","commit_stats":null,"previous_names":["whispersystems/curve25519-java"],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/signalapp%2Fcurve25519-java","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/signalapp%2Fcurve25519-java/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/signalapp%2Fcurve25519-java/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/signalapp%2Fcurve25519-java/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/signalapp","download_url":"https://codeload.github.com/signalapp/curve25519-java/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226304070,"owners_count":17603500,"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-25T09:28:08.756Z","updated_at":"2025-12-15T19:24:23.295Z","avatar_url":"https://github.com/signalapp.png","language":"C","funding_links":[],"categories":["安全","C"],"sub_categories":[],"readme":"# curve25519-java\n\nA Java Curve25519 implementation that is backed by native code when available, and\npure Java when a native library is not available. There is also a J2ME build variant.\n\n## Installing\n\nTo use on Android:\n\n```\ndependencies {\n  compile 'org.whispersystems:curve25519-android:(latest version number here)'\n}\n```\n\nTo use from pure Java:\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.whispersystems\u003c/groupId\u003e\n  \u003cartifactId\u003ecurve25519-java\u003c/artifactId\u003e\n  \u003cversion\u003e(latest version number here)\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nTo use from J2ME:\n\n```\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.whispersystems\u003c/groupId\u003e\n  \u003cartifactId\u003ecurve25519-j2me\u003c/artifactId\u003e\n  \u003cversion\u003e(latest version number here)\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\nThe Android artifact is an AAR that contains an NDK-backed native implementation, while\nthe Java artifact is a JAR that only contains the pure-Java Curve25519 provider.\n\n## Using\n\n## Obtaining an instance\n\nThe caller needs to specify a `provider` when obtaining a Curve25519 instance.  There are\nfour built in providers:\n\n1. `Curve25519.NATIVE` -- This is a JNI backed provider.\n1. `Curve25519.JAVA` -- This is a pure Java 7 backed provider.\n1. `Curve25519.J2ME` -- This is a J2ME compatible provider.\n1. `Curve25519.BEST` -- This is a provider that attempts to use `NATIVE`,\n   but falls back to `JAVA` if the former is unavailable.\n\nThe caller specifies a provider during instance creation:\n\n```\nCurve25519 cipher = Curve25519.getInstance(Curve25519.BEST);\n```\n\nSince J2ME doesn't have built-in `SecureRandom` support, J2ME users need to supply their\nown source of `SecureRandom` by implementing the `SecureRandomProvider` interface and\npassing it in:\n\n```\nCurve25519 cipher = Curve25519.getInstance(Curve25519.J2ME, new MySecureRandomProvider());\n```\n\n### Generating a Curve25519 keypair:\n\n```\nCurve25519KeyPair keyPair = Curve25519.getInstance(Curve25519.BEST).generateKeyPair();\n```\n\n### Calculating a shared secret:\n\n```\nCurve25519 cipher       = Curve25519.getInstance(Curve25519.BEST);\nbyte[]     sharedSecret = cipher.calculateAgreement(publicKey, privateKey);\n```\n\n### Calculating a signature:\n\n```\nCurve25519 cipher    = Curve25519.getInstance(Curve25519.BEST);\nbyte[]     signature = cipher.calculateSignature(secureRandom, privateKey, message);\n```\n\n### Verifying a signature:\n\n```\nCurve25519 cipher         = Curve25519.getInstance(Curve25519.BEST);\nboolean    validSignature = cipher.verifySignature(publicKey, message, signature);\n```\n\n## License\n\nCopyright 2015 Open Whisper Systems\n\nLicensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsignalapp%2Fcurve25519-java","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsignalapp%2Fcurve25519-java","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsignalapp%2Fcurve25519-java/lists"}