Files
ios/Unstoppable/Tests/Abstraction/Send/EcdsaUserOpSignerTests.swift
Anton Stavnichiy 378413dded Update zcash endpoint selector and backup flag.
* Fix tests. Move tests to develop scheme
2026-06-08 15:36:13 +06:00

33 lines
1.3 KiB
Swift

import EvmKit
import HsCryptoKit
import HsExtensions
@testable import Unstoppable
@testable import WalletCore
import XCTest
/// EcdsaUserOpSigner.signViaPasskey requires interactive Face ID and is exercised
/// end-to-end via manual smoke on testnet. This file covers the deterministic helper.
final class EcdsaUserOpSignerTests: XCTestCase {
func testDummySignatureIsRecoverable() throws {
let userOpHash = "b3ba1b2d851f430c8d9d55a64491b97bb3ba1b2d851f430c8d9d55a64491b97b".hs.hexData!
let dummy = try EcdsaUserOpSigner.dummySignature(userOpHash: userOpHash, chain: .ethereum)
XCTAssertEqual(dummy.count, 65)
XCTAssertTrue([27, 28].contains(dummy[64]), "Barz/OpenZeppelin ECDSA.recover expects Ethereum v=27/28")
let prefix = "\u{0019}Ethereum Signed Message:\n\(userOpHash.count)"
let prefixData = try XCTUnwrap(prefix.data(using: .utf8))
let prefixedHash = Crypto.sha3(prefixData + userOpHash)
var locallyRecoverable = dummy
locallyRecoverable[64] -= 27
let recoveredPubkey = Crypto.ellipticPublicKey(signature: locallyRecoverable, of: prefixedHash, compressed: false)
XCTAssertNotNil(recoveredPubkey)
}
func testDummySignatureRejectsMalformedHash() {
XCTAssertThrowsError(try EcdsaUserOpSigner.dummySignature(userOpHash: Data([0x01]), chain: .ethereum))
}
}