@@ -29,7 +29,6 @@ import BitcoinKit.Private
2929#else
3030import BitcoinKitPrivate
3131#endif
32- import secp256k1
3332
3433public struct Crypto {
3534 public static func sha1( _ data: Data ) -> Data {
@@ -57,49 +56,19 @@ public struct Crypto {
5756 }
5857
5958 public static func sign( _ data: Data , privateKey: PrivateKey ) throws -> Data {
60- let ctx = secp256k1_context_create ( UInt32 ( SECP256K1_CONTEXT_SIGN) ) !
61- defer { secp256k1_context_destroy ( ctx) }
62-
63- let signature = UnsafeMutablePointer< secp256k1_ecdsa_signature> . allocate( capacity: 1 )
64- defer { signature. deallocate ( ) }
65- let status = data. withUnsafeBytes { ( ptr: UnsafePointer < UInt8 > ) in
66- privateKey. data. withUnsafeBytes { secp256k1_ecdsa_sign ( ctx, signature, ptr, $0, nil , nil ) }
67- }
68- guard status == 1 else { throw CryptoError . signFailed }
69-
70- let normalizedsig = UnsafeMutablePointer< secp256k1_ecdsa_signature> . allocate( capacity: 1 )
71- defer { normalizedsig. deallocate ( ) }
72- secp256k1_ecdsa_signature_normalize ( ctx, normalizedsig, signature)
73-
74- var length : size_t = 128
75- var der = Data ( count: length)
76- guard der. withUnsafeMutableBytes ( { return secp256k1_ecdsa_signature_serialize_der ( ctx, $0, & length, normalizedsig) } ) == 1 else { throw CryptoError . noEnoughSpace }
77- der. count = length
78-
79- return der
59+ #if BitcoinKitXcode
60+ return _Crypto. signMessage ( data, withPrivateKey: privateKey. data)
61+ #else
62+ return try _Crypto. signMessage ( data, withPrivateKey: privateKey. data)
63+ #endif
8064 }
8165
8266 public static func verifySignature( _ signature: Data , message: Data , publicKey: Data ) throws -> Bool {
83- let ctx = secp256k1_context_create ( UInt32 ( SECP256K1_CONTEXT_VERIFY) ) !
84- defer { secp256k1_context_destroy ( ctx) }
85-
86- let signaturePointer = UnsafeMutablePointer< secp256k1_ecdsa_signature> . allocate( capacity: 1 )
87- defer { signaturePointer. deallocate ( ) }
88- guard signature. withUnsafeBytes ( { secp256k1_ecdsa_signature_parse_der ( ctx, signaturePointer, $0, signature. count) } ) == 1 else {
89- throw CryptoError . signatureParseFailed
90- }
91-
92- let pubkeyPointer = UnsafeMutablePointer< secp256k1_pubkey> . allocate( capacity: 1 )
93- defer { pubkeyPointer. deallocate ( ) }
94- guard publicKey. withUnsafeBytes ( { secp256k1_ec_pubkey_parse ( ctx, pubkeyPointer, $0, publicKey. count) } ) == 1 else {
95- throw CryptoError . publicKeyParseFailed
96- }
97-
98- guard message. withUnsafeBytes ( { secp256k1_ecdsa_verify ( ctx, signaturePointer, $0, pubkeyPointer) } ) == 1 else {
99- return false
100- }
101-
102- return true
67+ #if BitcoinKitXcode
68+ return _Crypto. verifySignature ( signature, message: message, publicKey: publicKey)
69+ #else
70+ return try _Crypto. verifySignature ( signature, message: message, publicKey: publicKey)
71+ #endif
10372 }
10473
10574 public static func verifySigData( for tx: Transaction , inputIndex: Int , utxo: TransactionOutput , sigData: Data , pubKeyData: Data ) throws -> Bool {
0 commit comments