✨ Enhance blockchain
This commit is contained in:
47
SwiftChainCore/Models/Wallet.swift
Normal file
47
SwiftChainCore/Models/Wallet.swift
Normal file
@@ -0,0 +1,47 @@
|
||||
//
|
||||
// Wallet.swift
|
||||
// SwiftChain
|
||||
//
|
||||
// Created by Victor on 27/11/2024.
|
||||
//
|
||||
|
||||
import CryptoKit
|
||||
import Foundation
|
||||
|
||||
public class Wallet {
|
||||
private let privateKey: Curve25519.Signing.PrivateKey
|
||||
let publicKey: Curve25519.Signing.PublicKey
|
||||
public let address: String
|
||||
|
||||
public init() {
|
||||
// Générer une nouvelle paire de clés
|
||||
privateKey = Curve25519.Signing.PrivateKey()
|
||||
publicKey = privateKey.publicKey
|
||||
|
||||
// Créer une adresse au format swift_(hash)
|
||||
let pubKeyData = publicKey.rawRepresentation
|
||||
let hash = SHA256.hash(data: pubKeyData)
|
||||
let hashString = hash.compactMap { String(format: "%02x", $0) }.joined()
|
||||
address = "swift_" + hashString.prefix(40)
|
||||
}
|
||||
|
||||
// Signer une transaction
|
||||
public func signTransaction(_ transaction: Transaction) -> Data? {
|
||||
let messageData = transaction.messageToSign()
|
||||
return try? privateKey.signature(for: messageData)
|
||||
}
|
||||
|
||||
// Vérifier une signature
|
||||
static func verifySignature(for transaction: Transaction, signature: Data, publicKeyData: Data) -> Bool {
|
||||
guard let publicKey = try? Curve25519.Signing.PublicKey(rawRepresentation: publicKeyData) else {
|
||||
return false
|
||||
}
|
||||
|
||||
return publicKey.isValidSignature(signature, for: transaction.messageToSign())
|
||||
}
|
||||
|
||||
// Obtenir la clé publique en format Data
|
||||
public func getPublicKeyData() -> Data {
|
||||
return publicKey.rawRepresentation
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user