一个用 Swift 4 编写的椭圆曲线库
警告:该库最初是为了学习目的而创建的。它不适合在生产环境中使用。请使用 libsecp256k1 代替。
该库为您轻松创建椭圆曲线提供了必要的框架。
该库包含几个 SEC-2 曲线,其中最受欢迎的是 secp256k1
。 在曲线的基础上,还包含一个通用的 ECDSA 结构体,用于签名和验证。
所有协议都是通用的,这意味着它们都不与特定的曲线或特定的 UInt 族成员绑定。 可以非常直接地创建一个具有特定素数的有限域,或者创建一个具有双精度或 Float80 精度的特定椭圆曲线。 请参阅 Playground 获取演示。
用于创建椭圆曲线密码学的顶层协议是 EllipticCurveOverFiniteField。 它由两个基本协议构成:FiniteFieldInteger 和 EllipticCurve,前者基于 FiniteField。 协议继承关系图如下:
+--------------------------+
| |
| FiniteField |-----+
| | |
+-------------|------------+ |Conformance
| |
|Conformance |
| |
+-------------v------------+ | +---------------------------+
| | | | |
| FiniteFieldInteger | | | EllipticCurve |
| | | | |
+-------------|------------+ | +-------------|-------------+
| | |
| | |
As Coordinates| +------------------------------+ |Conformance
| | | |
+--- EllipticCurveOverFiniteField <---+
| |
+---------------|--------------+
|
|As T
|
+---------------|--------------+
| |
| ECDSA<T> |
| |
+------------------------------+
FiniteField 是基础协议。 它定义了几个基本属性,例如 Zero
,One
,Characteristic
等。 它不打算直接使用,但您可以使用它来创建有限域。
FiniteFieldInteger 定义了基本框架,并为任何有限域整数提供了大多数默认实现。 示例
let p: UInt8 = 223
struct MyFFInt: FiniteFieldInteger {
static var Characteristic = p
var value: UInt8
init() {
value = 0
}
}
let a: MyFFInt = 1
let b: MyFFInt = 500
print(a + b)
这将创建一个 F_223 的有限域整数,然后您可以在其上使用基本的 +, -, *, / 运算。
EllipticCurve 也是通用的。 您可以在实数域上创建一个椭圆曲线,如下所示
struct MyECPoint: EllipticCurve {
static var a: Double = -1
static var b: Double = 1
var x: Double
var y: Double?
init() {
x = 0
}
}
let p: MyECPoint = MyECPoint(x: 1, y: 1)
print(p.description)
如果您想创建自己的 ECC,这是要使用的顶层协议
let P: UInt8 = 223
struct FFInt223: FiniteFieldInteger {
static var Characteristic: UInt8 = P
var value: UInt8
init() {
value = 0
}
}
struct MyECFF: EllipticCurveOverFiniteField {
static var Order: UInt8 = 212
static var a: FFInt223 = 2
static var b: FFInt223 = 7
var x: FFInt223
var y: FFInt223?
static var Generator: MyECFF = MyECFF(x: 16, y: 11)
init() {
x = 0
}
}
目前,仅测试了 Carthage 包安装。
brew install carthage
github "hyugit/EllipticCurve"
carthage update
dependencies: [
.package(url: "https://github.com/hyugit/EllipticCurve.git", from: "0.3.0")
]
如果您有错误报告或功能请求,请在此处在 GitHub 上提出问题。 欢迎任何贡献。 😃
EllipticCurve 在 MIT 许可证下发布。 有关详细信息,请参见 LICENSE。