Skip to content

Commit 6f3ac68

Browse files
authored
Gyb schnorr (#26)
1 parent 5fef05f commit 6f3ac68

11 files changed

+630
-623
lines changed

Package.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ let package = Package(
7373
],
7474
exclude: [
7575
"K1/Keys/Keys.swift.gyb",
76-
"K1/ECDSA/ECDSA.swift.gyb",
76+
"K1/Signing/Signing.swift.gyb",
77+
"K1/Validation/Validation.swift.gyb",
7778
],
7879
swiftSettings: [
7980
.define("CRYPTO_IN_SWIFTPM_FORCE_BUILD_API"),

Sources/K1/K1/ECDSA/ECDSA.generated.swift

-310
This file was deleted.

Sources/K1/K1/ECDSA/ECDSA.swift

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// MARK: - K1.ECDSA
2+
extension K1 {
3+
/// A mechanism used to create or verify a cryptographic signature using the `secp256k1` elliptic curve digital signature algorithm (ECDSA).
4+
public enum ECDSA {}
5+
}
6+
7+
// MARK: - K1.ECDSA.ValidationOptions
8+
extension K1.ECDSA {
9+
public struct ValidationOptions {
10+
public let malleabilityStrictness: MalleabilityStrictness
11+
12+
public init(malleabilityStrictness: MalleabilityStrictness) {
13+
self.malleabilityStrictness = malleabilityStrictness
14+
}
15+
}
16+
}
17+
18+
extension K1.ECDSA.ValidationOptions {
19+
public static let `default`: Self = .init(
20+
malleabilityStrictness: .rejected
21+
)
22+
23+
/// Whether or not to consider malleable signatures valid.
24+
///
25+
/// [more]: https://github.com/bitcoin-core/secp256k1/blob/2e5e4b67dfb67950563c5f0ab2a62e25eb1f35c5/include/secp256k1.h#L510-L550
26+
public enum MalleabilityStrictness {
27+
/// Considers all malleable signatures **invalid**.
28+
case rejected
29+
30+
/// Accepts malleable signatures valid.
31+
case accepted
32+
}
33+
}
34+
35+
// MARK: - K1.ECDSA.SigningOptions
36+
extension K1.ECDSA {
37+
public struct SigningOptions: Sendable, Hashable {
38+
public let nonceFunction: NonceFunction
39+
40+
public init(nonceFunction: NonceFunction) {
41+
self.nonceFunction = nonceFunction
42+
}
43+
}
44+
}
45+
46+
extension K1.ECDSA.SigningOptions {
47+
public static let `default`: Self = .init(nonceFunction: .deterministic())
48+
49+
public enum NonceFunction: Sendable, Hashable {
50+
case random
51+
52+
/// RFC6979
53+
case deterministic(arbitraryData: RFC6979ArbitraryData? = nil)
54+
}
55+
}
56+
57+
// MARK: - K1.ECDSA.SigningOptions.NonceFunction.RFC6979ArbitraryData
58+
extension K1.ECDSA.SigningOptions.NonceFunction {
59+
public struct RFC6979ArbitraryData: Sendable, Hashable {
60+
public let arbitraryData: [UInt8]
61+
public init(arbitraryData: [UInt8]) throws {
62+
guard arbitraryData.count == Curve.Field.byteCount else {
63+
throw K1.Error.incorrectByteCountOfArbitraryDataForNonceFunction
64+
}
65+
self.arbitraryData = arbitraryData
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)