Мне нужно взаимодействовать с Hyperledger Fabri c в приложении iOS, и я столкнулся с проблемой при создании подписи предложения. Fabri c требует ECDSA с низким уровнем, но я не могу найти способ указать это в криптографических функциях Apple. Без указания low-s мои звонки завершаются неудачно примерно в 50% случаев, когда S выше R.
Мой код подписи довольно прост:
static func sign(data:Data, withPrivateKey:SecKey) throws -> Data {
var error: Unmanaged<CFError>?
guard
let signature = SecKeyCreateSignature(
withPrivateKey,
.ecdsaSignatureMessageX962SHA256,
data as CFData,
&error
) as Data?
else {
throw error!.takeRetainedValue()
}
return signature
}