# @dannycoates/elliptic 中文文档

规范地址：https://npmcn.com/package/%40dannycoates/elliptic/

版本：6\.4\.2
npm 元数据更新时间：2022-04-05T02:42:19.168Z
中文译文更新时间：2026-11-11T10:57:50.274Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40dannycoates/elliptic
原文对照：https://npmcn.com/package/%40dannycoates/elliptic/?lang=original
项目主页：https://github.com/indutny/elliptic
源码仓库：https://github.com/indutny/elliptic

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：118 kB，17 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：7 个
- 首次发布：2019-03-18T19:18:35.209Z
- 最新版本发布：2019-03-18T19:18:35.589Z
- 近 30 天下载量：2600（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：1（近 12 个月 0 个）

## 中文简介

欧共体密码

## 安装

```sh
npm install @dannycoates/elliptic
```

也可以使用：`pnpm add @dannycoates/elliptic`、`yarn add @dannycoates/elliptic`、`bun add @dannycoates/elliptic`

## README

# 椭圆 [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic) [![Coverage Status](https://coveralls.io/repos/indutny/elliptic/badge.svg?branch=master&service=github)](https://coveralls.io/github/indutny/elliptic?branch=master) [![Code Climate](https://codeclimate.com/github/indutny/elliptic/badges/gpa.svg)](https://codeclimate.com/github/indutny/elliptic)

[![Saucelabs Test Status](https://saucelabs.com/browser-matrix/gh-indutny-elliptic.svg)](https://saucelabs.com/u/gh-indutny-elliptic)

快速椭圆-曲线密码学在平版javascript中被执行.

注:请看 [http://safecurves.cr.yp.to/ (中文(简体) )](http://safecurves.cr.yp.to/) 在选择曲线前 你的密码操作.

## 奖励

ECC比普通的RSA密码要慢得多,JS的执行是: 更慢一点.

## 基准

```bash
$ node benchmarks/index.js
Benchmarking: sign
elliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)
eccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)
------------------------
Fastest is elliptic#sign
========================
Benchmarking: verify
elliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)
eccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)
------------------------
Fastest is elliptic#verify
========================
Benchmarking: gen
elliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)
eccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)
------------------------
Fastest is elliptic#gen
========================
Benchmarking: ecdh
elliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)
------------------------
Fastest is elliptic#ecdh
========================
```

## API 密码

### ECDSA 数据交换系统

```javascript
var EC = require('elliptic').ec;

// Create and initialize EC context
// (better do it once and reuse it)
var ec = new EC('secp256k1');

// Generate keys
var key = ec.genKeyPair();

// Sign the message's hash (input must be an array, or a hex-string)
var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var signature = key.sign(msgHash);

// Export DER encoded signature in Array
var derSign = signature.toDER();

// Verify signature
console.log(key.verify(msgHash, derSign));

// CHECK WITH NO PRIVATE KEY

var pubPoint = key.getPublic();
var x = pubPoint.getX();
var y = pubPoint.getY();

// Public Key MUST be either:
// 1) '04' + hex string of x + hex string of y; or
// 2) object with two hex string properties (x and y); or
// 3) object with two buffer properties (x and y)
var pub = pubPoint.encode('hex');                                 // case 1
var pub = { x: x.toString('hex'), y: y.toString('hex') };         // case 2
var pub = { x: x.toBuffer(), y: y.toBuffer() };                   // case 3
var pub = { x: x.toArrayLike(Buffer), y: y.toArrayLike(Buffer) }; // case 3

// Import public key
var key = ec.keyFromPublic(pub, 'hex');

// Signature MUST be either:
// 1) DER-encoded signature as hex-string; or
// 2) DER-encoded signature as buffer; or
// 3) object with two hex-string properties (r and s); or
// 4) object with two buffer properties (r and s)

var signature = '3046022100...'; // case 1
var signature = new Buffer('...'); // case 2
var signature = { r: 'b1fc...', s: '9c42...' }; // case 3

// Verify signature
console.log(key.verify(msgHash, signature));
```

### 萨尔瓦多

```javascript
var EdDSA = require('elliptic').eddsa;

// Create and initialize EdDSA context
// (better do it once and reuse it)
var ec = new EdDSA('ed25519');

// Create key pair from secret
var key = ec.keyFromSecret('693e3c...'); // hex string, array or Buffer

// Sign the message's hash (input must be an array, or a hex-string)
var msgHash = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
var signature = key.sign(msgHash).toHex();

// Verify signature
console.log(key.verify(msgHash, signature));

// CHECK WITH NO PRIVATE KEY

// Import public key
var pub = '0a1af638...';
var key = ec.keyFromPublic(pub, 'hex');

// Verify signature
var signature = '70bed1...';
console.log(key.verify(msgHash, signature));
```

### ECDH 人权委

```javascript
var EC = require('elliptic').ec;
var ec = new EC('curve25519');

// Generate keys
var key1 = ec.genKeyPair();
var key2 = ec.genKeyPair();

var shared1 = key1.derive(key2.getPublic());
var shared2 = key2.derive(key1.getPublic());

console.log('Both shared secrets are BN instances');
console.log(shared1.toString(16));
console.log(shared2.toString(16));
```

三名及三名以上成员:

```javascript
var EC = require('elliptic').ec;
var ec = new EC('curve25519');

var A = ec.genKeyPair();
var B = ec.genKeyPair();
var C = ec.genKeyPair();

var AB = A.getPublic().mul(B.getPrivate())
var BC = B.getPublic().mul(C.getPrivate())
var CA = C.getPublic().mul(A.getPrivate())

var ABC = AB.mul(C.getPrivate())
var BCA = BC.mul(A.getPrivate())
var CAB = CA.mul(B.getPrivate())

console.log(ABC.getX().toString(16))
console.log(BCA.getX().toString(16))
console.log(CAB.getX().toString(16))
```

注: `.derive()` 返回 a [比利时](https://github.com/indutny/bn.js) 举个例子.

## 支持的曲线

椭圆形.js 支持以下曲线类型 :

-   短网点
-   蒙哥马利
-   爱德华兹
-   扭曲了爱德华兹

以下曲线“ presets” 嵌入到库中 :

-   `secp256k1`
-   `p192`
-   `p224`
-   `p256`
-   `p384`
-   `p521`
-   `curve25519`
-   `ed25519`

注: `curve25519` 无法用于 ECDSA, 使用 `ed25519` 换句话说.

### 执行详情

ECDSA正在使用决定论 `k` 按数值生成 [RFC6979 (法语)](http://tools.ietf.org/html/rfc6979)大多数 曲线操作在非亚芬坐标上进行(投影) 不同情况使用各种窗口技术.

所有业务均在减少范围内使用 [bn.js (中文(简体) )](https://github.com/indutny/bn.js),散列是,这是 国家 [hash.js (英语)](https://github.com/indutny/hash.js)

### 相关项目

-   [阴道](https://github.com/bitchan/eccrypto):对这两个实体不完全执行《欧洲安全和防卫法》、《欧洲人权公约》和《欧洲经济、社会、文化权利国际公约》 浏览器和节点( 使用) `elliptic` 用于浏览器和 [秒256k1-节点](https://github.com/wanderer/secp256k1-node) 页:1 节点)

#### 自由主义

这个软件根据麻省理工学院的许可证获得许可.

版权由Fedor Indutny提供, 2014.

特此免费准许任何人获得 本软件和相关文档文件的复制件 “软件”,在软件中不受限制地处理,包括 不限制使用、复制、修改、合并、出版、, 软件的分发、分版和/或销售,并允许 提供软件的人 下列条件:

上述版权通知和本许可通知应当包括: 软件的所有副本或大部分.

软件被提供"AS IS", 没有任何恐惧, EXPRESS ,包括但不局限于 紧迫性,特别是目的和非目的的证明。 内 对于任何索赔, 都不得使用任何连锁电话或警察电话, 转让或其他责任,以契约、条约或 产生于、出自或与溶剂有关的 在软件中使用或其他交易.

## 常见问题

### @dannycoates/elliptic 是什么？

欧共体密码

### 如何安装 @dannycoates/elliptic？

在项目目录运行 npm install @dannycoates/elliptic，或使用 pnpm add / yarn add / bun add。

### @dannycoates/elliptic 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/dannycoates\_\_elliptic 是否存在。

### @dannycoates/elliptic 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @dannycoates/elliptic 可以商用吗？

@dannycoates/elliptic 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @dannycoates/elliptic 的下载量有多少？

根据 npm 官方下载统计，@dannycoates/elliptic 在 2026/10/12 – 2026/11/10 这 30 天内被下载 2,600 次，日均约 87 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @dannycoates/elliptic 还在维护吗？

最新版本 6\.4\.2 发布于 2019/03/19（7 年前）；至今共发布 1 个版本，其中过去 12 个月发布了 0 个；首次发布于 2019/03/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

